SELECT id FROM postalcodes ORDER BY id DESC LIMIT $x, 1
$x 是一个小于 1000 的数字(由于 max_matches)并且邮政编码索引包含约 110 万行。
查询时间:0.17 秒
为什么要花这么长时间?有没有更好的方法在索引末尾查询?
最佳答案
为什么? sphinx 按原样执行该查询的唯一方法是获取所有行,对它们进行排序,然后遍历以找到所需的行。
如评论中所述,sphinx 并不像 mysql 那样真正具有索引的概念。 (理论上应该用sphinx来做全文搜索,它使用了特殊的倒排索引)
这里有一些讨论, http://sphinxsearch.com/forum/view.html?id=5683 关于可能的解决方法。
使用 reverse_scan 和可能的 cutoff 可能会对您有所帮助。
SELECT id FROM postalcodes LIMIT $x, 1 OPTION reverse_scan = 1, cutoff = 1000;
尽管如果您最终将“MATCH”添加到 where,那么您最终将不遵守隐式排序,因此如果没有 ORDER BY,查询将无法工作,在这种情况下,reverse_scan 将无济于事。
关于mysql - 为什么这个 sphinx 查询这么慢?按 id DESC 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27201272/