ST_GeomFromText лучше, чем предоставление прямой геометрии?

Недавно я работал с postgis, и в моем запросе, если я использую ST_GeomFromText, он выполняется быстрее, чем выполнение подзапроса для получения geom.

Я думал, что ST_GeomFromText будет дороже, но после множества тестов каждый раз, когда я получал результат быстрее, у меня возник вопрос. Есть ли этому какое-то объяснение? потому что для меня получение геометрии непосредственно в подзапросе лучше, чем получение геометрии в виде текста, а затем добавленного как GeomFromText.

Спасибо, Сара


person user1323592    schedule 10.04.2012    source источник


Ответы (1)


Ваша проблема в том, что проблемы разные. ST_GeomFromText будет неизменяемой функцией, поэтому вывод зависит только от ввода. Это означает, что планировщик может выполнить его один раз в начале запроса. Запуск подзапроса означает, что вам нужно искать геометрию, что означает доступ к диску и т. д. В первом случае у вас есть небольшая активность ЦП, выполняемая один раз для запроса, а во втором у вас есть поиск по диску.

Так что ответ в какой-то степени зависит от того, что вы с ним делаете. В общем, вы можете предположить, что оптимизатор довольно хорошо справляется с такими вещами, как преобразование типов на входе, когда они не зависят от настроек.

Подумайте об этом таким образом.

SELECT * FROM mytable WHERE my_geom = ST_GeomFromText(....);

Это преобразуется во что-то вроде следующего псевдокода:

 private_geom = ST_GeomFromText(....);
 SELECT * FROM mytable WHERE my_geom = private_geom;

Затем этот запрос планируется и выполняется.

Очевидно, вы не хотите добавлять круговые обходы только для того, чтобы избежать поиска в запросе, но если вы знаете геометрию, вы также можете указать ее через ST_GeomFromText(....) в своем запросе.

person Chris Travers    schedule 01.04.2013