如何在PostgreSQL的地理数据上改进“GROUP BY”的“MAX”?
发布时间:2020-12-13 16:14:19 所属栏目:百科 来源:网络整理
导读:我有3列公司的地址表:company_id,lat,lon. 我需要与每家公司保持最近的距离. 我为PostgreSQL使用cube和earthdistance扩展. 查询工作正常但很慢: SELECT company_id,MIN(earth_distance(ll_to_earth(lat,lon),ll_to_earth(53.96,83.96))) AS distanceFROM c
我有3列公司的地址表:company_id,lat,lon.
我需要与每家公司保持最近的距离. 查询工作正常但很慢: SELECT company_id,MIN(earth_distance(ll_to_earth(lat,lon),ll_to_earth(53.96,83.96))) AS distance FROM companies GROUP BY company_id; GIST索引如: CREATE INDEX i_name on companies USING gist(ll_to_earth(lat,lon)); 不使用. 我该如何解决这个问题?
通常,索引可以帮助您从大表中查找少量行,或者通过ORDER BY提高查询速度.您的查询需要扫描表中的所有行,并对所有行执行复杂计算.因此,索引无法帮助您,因为Postgres不会将索引用作预先计算的值.
您应该将ll_to_earth(lat,lon)的值预先计算到单独的列中,并在查询中使用此列. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |