我有一个SELECT
我想优化的声明。mysql-order by optimization表示在某些情况下不能使用索引来优化ORDER BY
. 具体点:
您对键的非连续部分使用 ORDER BY
SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;
让我想,这可能是这种情况。我正在使用以下索引:
UNIQUE KEY `met_value_index1` (`RTU_NB`,`DATETIME`,`MP_NB`),
KEY `met_value_index` (`DATETIME`,`RTU_NB`)
使用以下 SQL 语句:
SELECT * FROM met_value
WHERE rtu_nb=constant
AND mp_nb=constant
AND datetime BETWEEN constant AND constant
ORDER BY mp_nb, datetime
- 删除索引并使用新的
met_value_index1
排序创建它就足够了RTU_NB
吗?MP_NB
DATETIME
- 我必须在
ORDER BY
子句中包含 RTU_NB 吗?
结果:我尝试了@meriton 的建议并添加了 index
met_value_index2
。SELECT
1.2 秒后完成,之前 5.06 秒后完成。以下不属于问题,但作为旁注:经过其他一些尝试,我将引擎从 MyISAM 切换到 InnoDB - 使用rtu_nb, mp_nb, datetime
作为主键 - 语句在 0.13 秒后完成!