【发布时间】:2016-03-18 14:14:49
【问题描述】:
我已经定义了一个函数,它从表 tz_world 中为一组 lon、lat 值确定时区:
create function get_timezone(numeric, numeric)
returns character varying(30) as $$
select tzid from tz_world where ST_Contains(geom, ST_MakePoint($1, $2));
$$ language SQL immutable;
现在我想在另一个表的查询的 SELECT 子句中使用这个函数:
select get_timezone(lon, lat) from event where...;
这个功能比较慢,所以我尝试使用索引来加快速度:
create index event_timezone_idx on event (get_timezone(event.lon, event.lat));
虽然这加快了在 WHERE 子句中使用该函数的查询,但它对上面在 SELECT 子句中使用 get_timezone(lon, lat) 的变体没有影响。
是否可以改写查询和/或索引以加快时区确定?
更新 谢谢你的回答!!我决定最后为时区添加一个额外的列,并在创建/更新事件时填充它。
【问题讨论】:
-
当您使用
select列表中的函数时,无法加快速度,因为 Postgres 需要为返回的每一行运行该函数
标签: postgresql select indexing