【发布时间】:2012-01-26 07:22:10
【问题描述】:
我有一个想要优化的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创建它是否足够? - 是否必须将 RTU_NB 包含在
ORDER BY子句中?
结果:我尝试了@meriton 的建议并添加了索引
met_value_index2。 SELECT 在 1.2 秒后完成,之前它在 5.06 秒后完成。以下不属于问题,但作为附注:经过其他一些尝试后,我将引擎从 MyISAM 切换到 InnoDB - 使用 rtu_nb, mp_nb, datetime 作为主键 - 语句在 0.13 秒后完成!
【问题讨论】:
标签: mysql sql optimization database-indexes