我在优化查询时遇到了困难,例如
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 个。
- 使用内存表,但在对如此大的结果进行排序时表现不佳。
- 狮身人面像,但我不确定它是否有助于这些类型的查询。
此外,是否有任何 OLAP 多维数据集实现可以优化此类查询?