Dan*_*son 1 sql database postgresql indexing
我不是数据库专家,但我有足够的知识让自己陷入困境,就像这里的情况一样.这个查询
SELECT DISTINCT p.*
FROM points p, areas a, contacts c
WHERE ( p.latitude > 43.6511659465
AND p.latitude < 43.6711659465
AND p.longitude > -79.4677941889
AND p.longitude < -79.4477941889)
AND p.resource_type = 'Contact'
AND c.user_id = 6
Run Code Online (Sandbox Code Playgroud)
非常慢.points表的记录少于2000条,但执行大约需要8秒.纬度和经度列上有索引.删除隐含resource_type和user_id的子句没有区别.
纬度和经度字段都被格式化为数字(15,10) - 我需要一些计算的精度.
此项目中有许多其他查询,其中比较了点,但没有执行时间问题.这是怎么回事?
OMG*_*ies 11
您是否忘记了实际查询中的内容?它缺少三个表之间的ANSI-89连接,为您提供笛卡尔积,但只提取POINTS记录.
您正在加入三个表,p,a和c,但您没有指定如何将它们连接在一起.您得到的是在符合条件的所有表中的所有行之间的完整笛卡尔连接,然后是区域中的所有行.
你可能想要在某些区域附加某些东西.和...接触的东西......好吧,我不知道你的架构是什么样的.
尝试在开头粘贴"EXPLAIN"以获取有关正在发生的事情的信息.