首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORDER优化是否在以下SELECT语句中生效?

ORDER优化是否在以下SELECT语句中生效?
EN

Stack Overflow用户
提问于 2011-12-22 17:13:51
回答 3查看 233关注 0票数 5

我有一个SELECT语句,我想优化它。mysql -通过优化排序说,在某些情况下,索引不能用于优化ORDER BY。具体而言,要点:

对键的非连续部分使用ORDER 从t1中选择* key2=constant ORDER BY key_part2;

让我想,这可能是真的。我使用以下索引:

代码语言:javascript
复制
UNIQUE KEY `met_value_index1` (`RTU_NB`,`DATETIME`,`MP_NB`),
KEY `met_value_index` (`DATETIME`,`RTU_NB`)

使用以下SQL-语句:

代码语言:javascript
复制
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_NBMP_NBDATETIME创建索引是否足够?
  • 我是否必须将RTU_NB包括在ORDER BY子句中?

结果:,我尝试了@meriton的建议,并添加了索引met_value_index2SELECT在1.2秒后完成,之前在5.06秒后完成。下面不属于这个问题,但附带说明:经过一些其他尝试之后,我将引擎从MyISAM切换到了InnoDB --以rtu_nb, mp_nb, datetime作为主键--在0.13秒后完成了语句!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-22 22:37:12

我不明白你的疑问。如果某一行必须与要返回的mp_np = constant匹配,则返回的所有行都将具有相同的mp_nb,因此将mp_nb包含在order子句中无效。我建议您使用语义等效的语句:

代码语言:javascript
复制
SELECT * FROM met_value
WHERE rtu_nb=constant
AND mp_nb=constant
AND datetime BETWEEN constant AND constant
ORDER BY datetime

以避免不必要地混淆查询优化器。

现在,关于您的问题:如果数据库知道基础访问将以正确的顺序返回行,它就可以实现order子句而不进行排序。对于索引,这意味着如果where子句匹配的行按照order子句请求的顺序出现在索引中,则索引可以帮助排序。

这里就是这种情况,因此数据库实际上可以在met_value_index1上对rtu_nb=constant AND datetime BETWEEN constant AND constant所在的行进行索引范围扫描,然后检查每个行是否有mp_nb=constant,但是如果mp_nb=constant具有很高的选择性,这就相当于检查更多的行。换句话说,如果匹配的行在索引中是连续的,那么索引是最有用的,因为这意味着索引范围扫描只会触及实际需要返回的行。

因此,以下索引将对此查询更有帮助:

代码语言:javascript
复制
UNIQUE KEY `met_value_index2` (`RTU_NB`,`MP_NB`, `DATETIME`),

因为所有匹配的行都将在索引中彼此相邻,并且这些行将按照order by子句请求的顺序出现在索引中。我不能说查询优化器是否足够聪明,因此您应该检查执行计划。

票数 1
EN

Stack Overflow用户

发布于 2011-12-22 17:23:35

我不认为它将使用任何索引的订单。但是你应该看看执行计划。或这里.

票数 1
EN

Stack Overflow用户

发布于 2011-12-22 17:22:16

字段在WHERE子句中出现的顺序必须与索引中的顺序匹配。因此,对于当前的查询,您需要一个按rtu_nb、mp_nb、datetime顺序的字段索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8607475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档