mysql – 优化前N个查询

我正在努力优化像这样的查询

SELECT RESULT_ID FROM RESULTS 
WHERE SOURCE = 1 AND GROUP=2 AND SCORE1 BETWEEN 20 AND 100 
ORDER BY SCORE2 LIMIT 450; 

在一个4000万行innodb表.该查询可能需要排序多达1500万个结果才能获得前450名.到目前为止,我尝试过:

>定义索引,但那些不习惯排序,因为MySQL
在范围条件之后忽略索引中的任何列.因为我们
有一堆得分列,我们可以获得范围条件
他们的数量,然后对特定的分数进行排序
将结果集限制在前450.
>使用内存表,但在排序如此大的结果时效果不佳.
> Sphinx,但我不确定它是否有助于这些类型的查询.

此外,是否有任何OLAP多维数据集实现可以优化这些类型的查询?

最佳答案 我建议创建一个单独的表来保存这450行,并在每次插入新行或更新旧时计算并参考另一个表.

这样您的查询就不需要每次都浏览所有行.

点赞