为什么这个sphinx查询这么慢? ORDER BY id DESC

时间:2014-11-29 10:35:17

标签: mysql search-engine sphinx performance-testing

SELECT id FROM postalcodes ORDER BY id DESC LIMIT $x, 1

$ x是一个数字< 1000(由于max_matches)和邮政编码索引包含~1,100万行。

查询时间:0,17秒

为什么需要这么长时间?有没有更好的方法在索引的最后查询?

1 个答案:

答案 0 :(得分:3)

为什么呢? 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',那么你最终不会遵循隐式排序,所以如果没有ORDER BY,查询将无法工作,在这种情况下,reverse_scan将无法提供帮助。