Ваша проблема в том, что проблемы разные. 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