mysql - 优化前 N 个查询

标签 mysql sphinx olap-cube

我很难优化像

这样的查询
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 个结果。到目前为止,我已经尝试过:

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

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

最佳答案

我建议创建一个单独的表来保存这 450 行,并在每次插入新行或更新旧行时计算并引用另一个表。

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

关于mysql - 优化前 N 个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7022503/

相关文章:

SSAS:OLAP存储引擎错误:处理时找不到属性键

MYSQL 连接 : find all matches from table a ,,即使表 b 中不存在

database - 如何使用 Sphinx 搜索大型 JOINed 表?

centos - 如何在 cPanel/WHM 中修复 RedHat/Centos 6.7 上 Sphinx 搜索 2.2.10 缺少依赖项 (libmysqlclient_16) 的安装错误

spring - spring-boot 是否支持任何动态 OLAP 报告生成工具?

sql - 处理多维数据集时出错 : There is not enough space on the disk

使用预定义密码安装的 MySQL

mysql - 自己做MySQL行复制的问题

python - 我的 python 代码写在一个临时数据库中

centos - searchd 有 2 个进程,而它应该是一个