MySQL是否支持select 查询条件智能优化


表 tb_user 数据3000万,字段 email emailvalid ,其中字段 emailvalid 为索引。
以下2条SQL性能是否有区别, emailvalid 和email的顺序调换的话


 sql


 select * from tb_user where emailvalid=1 and email='test@gmail.com'
select * from tb_user where email='test@gmail.com' and emailvalid=1

数据库性能优化 mysql php mysql优化

看海的小羽 10 years, 11 months ago

你这种情况需要建立复合索引来解决吧,两个字段同时构成一个索引,这样也会大大减少查询的时间。
个人觉得是第一种才会有效果,mysql内部先识别了emailvalid的值,再去匹配email的字段,然后第一个作为索引起作用了。
正如@品第所说的,emailvalid你建立好索引但是值规定了0和1,然后这样耦合性太强的索引作用很低,甚至是没有

你们最讨厌了 answered 10 years, 11 months ago

理论上第二种的形式会比第一种好,如果你的索引类型是b-tree的话。

nico72 answered 10 years, 11 months ago

Where中的顺序对优化没有影响。

其中字段 emailvalid 为索引

但如果emailvalid的值只是0或1的话, 该索引没有什么价值。应该以email为索引。

全天都是满月 answered 10 years, 11 months ago

有区别,第二个查询无法切中索引,推荐 explain 来判断自己的select是否高效。

harqi answered 10 years, 11 months ago

Your Answer