素材牛VIP会员
mysql里的where条件顺序对使用索引是否有影响
 蒙***生  分类:SQL代码  人气:806  回帖:8  发布于6年前 收藏

比如user表有ab连个字段,而且都做了索引,那么我构建查询语句

SELECT * FROM user WHERE a = 1 AND b = 2

SELECT * FROM user WHERE b = 2 AND a = 1

如果满足a条件行数远大于满足b的,是否调整它们的顺序会产生区别?

 标签:sqlmysql

讨论这个帖子(8)垃圾回帖将一律封号处理……

Lv1 新人
qi***hu 职业无 6年前#1
  1. 如果经常有这种查询, 建议建个ab的联合索引,是最有效的优化。
    缺点是,新建索引会增加占用的空间,降低插入速度
  2. 不建联合索引,两列又都有索引时,mysql会有采取自己的算法去选区最快点索引,
    如果你很清楚,从a还是b查起来更快, 可以使用强制索引FORCE INDEX (FIELD1)
  3. 多用 explain去观察, 优化你的sql
Lv5 码农
15***75 技术总监 6年前#2

可能会有影响,具体情况你可以用explain看下

Lv4 码徒
静***5 Linux系统工程师 6年前#3

如果mysql的查询规划连这个都做不到的话,mysql早就去死了

Lv5 码农
迷***文 JS工程师 6年前#4

我记得以前的公司有个业务也是涉及到这个点,当时做实验的结果是mysql的查询是从右往左的,现在的话,应该优化了这个点,具体没有做过实验

Lv6 码匠
小***心 站长 6年前#5

你说的这种情况,AND前后条件顺序不影响查询的效率,就是没有区别的;既然这两个字段都是查询条件,可以建立一个联合索引以提高查询效率

Lv5 码农
迷***雾 软件测试工程师 6年前#6

和写的顺序没有关系。
若建联后索引的话,联合索引中字段的段序是会影响查询效率的。基本原则是区分度大的字段放在前面。(测试了一下索引的顺序很重要)

Lv6 码匠
奇***士 移动开发工程师 6年前#7

mysql 的 and 是同时满足的,并不区分谁满足的多,谁满足的少 .

Lv4 码徒
鬼***0 JAVA开发工程师 6年前#8

测试过了,不会影响

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取