【发布时间】:2016-05-16 04:56:47
【问题描述】:
我正在运行以下查询:
SELECT * FROM foo WHERE name = 'Bob' ORDER BY address DESC LIMIT 25 OFFSET 1
因为我的表中有 name = 'Bob' 的记录,所以在 10M 记录的表上查询时间很快(<.5>
但是,如果我搜索 name = 'Susan',则查询需要 45 秒以上。我在 name = 'Susan' 的表中没有记录。
我对每个姓名和地址都有一个索引。我已经清空了表格,对其进行了分析,甚至尝试重新编写查询:
SELECT * FROM (SELECT * FROM foo WHERE name = 'Bob' ORDER BY address DESC) f LIMIT 25 OFFSET 1
并且找不到任何解决方案。我不确定如何进行。请注意,这与this post 不同,因为我的缓慢仅在没有记录时才会发生。
编辑: 如果我取出 ORDER BY 地址,它就会运行得很快。显然,我需要那个。我试过重写它(没有成功):
SELECT * FROM (SELECT * FROM foo WHERE name = 'Bob') f ORDER BY address DESC LIMIT 25 OFFSET 1
【问题讨论】:
-
"slow" 当大表中没有 匹配 行时可能意味着它正在执行表扫描。请提供解释计划。还怀疑您为我们的消费“简化”了这个,但细节可能很重要。