首頁  >  問答  >  主體

mysql里的where条件顺序对使用索引是否有影响

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

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

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

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

大家讲道理大家讲道理2742 天前626

全部回覆(7)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 11:45:39

    mysql 的 and 是同時滿足的,並不區分誰滿足的多,誰滿足的少 .

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 11:45:39

    可能會有影響,具體情況可以用explain看下

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 11:45:39

    1. 如果經常有這種查詢, 建議建個ab的聯合索引,是最有效的最佳化。
      缺點是,新建索引會增加佔用的空間,降低插入速度
    2. 不建聯合索引,兩列又都有索引時,mysql會有採取自己的演算法去選區最快點索引,
      如果你很清楚,從a還是b查起來更快, 可以使用強制索引FORCE INDEX (FIELD1)
    3. 多用 explain去觀察, 最佳化你的sql

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 11:45:39

    你說的這種情況,AND前後條件順序不影響查詢的效率,就是沒有區別的;既然這兩個字段都是查詢條件,可以建立一個聯合索引以提高查詢效率

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:45:39

    我記得以前的公司有個業務也是涉及到這個點,當時做實驗的結果是mysql的查詢是從右往左的,現在的話,應該優化了這個點,具體沒有做過實驗

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 11:45:39

    和寫的順序沒有關係。
    若建聯後索引的話,聯合索引中欄位的段序是會影響查詢效率的。基本原則是區分度大的欄位放在前面。 (測試了一下索引的順序很重要)

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 11:45:39

    如果mysql的查詢規劃連這都做不到的話,mysql早就去死了

    回覆
    0
  • 取消回覆