SELECT id FROM postalcodes ORDER BY id DESC LIMIT $x, 1
$ x是一个数字< 1000(由于max_matches)和邮政编码索引包含~1,100万行。
查询时间:0,17秒
为什么需要这么长时间?有没有更好的方法在索引的最后查询?
答案 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将无法提供帮助。