比如user表有a和b连个字段,而且都做了索引,那么我构建查询语句
user
a
b
SELECT * FROM user WHERE a = 1 AND b = 2
和
SELECT * FROM user WHERE b = 2 AND a = 1
如果满足a条件行数远大于满足b的,是否调整它们的顺序会产生区别?
光阴似箭催人老,日月如移越少年。
mysql 的 and 是同時滿足的,並不區分誰滿足的多,誰滿足的少 .
可能會有影響,具體情況可以用explain看下
explain
FORCE INDEX (FIELD1)
你說的這種情況,AND前後條件順序不影響查詢的效率,就是沒有區別的;既然這兩個字段都是查詢條件,可以建立一個聯合索引以提高查詢效率
AND
我記得以前的公司有個業務也是涉及到這個點,當時做實驗的結果是mysql的查詢是從右往左的,現在的話,應該優化了這個點,具體沒有做過實驗
和寫的順序沒有關係。 若建聯後索引的話,聯合索引中欄位的段序是會影響查詢效率的。基本原則是區分度大的欄位放在前面。 (測試了一下索引的順序很重要)
如果mysql的查詢規劃連這都做不到的話,mysql早就去死了
mysql 的 and 是同時滿足的,並不區分誰滿足的多,誰滿足的少 .
可能會有影響,具體情況可以用
explain
看下a
和b
的聯合索引,是最有效的最佳化。缺點是,新建索引會增加佔用的空間,降低插入速度
如果你很清楚,從
a
還是b
查起來更快, 可以使用強制索引FORCE INDEX (FIELD1)
explain
去觀察, 最佳化你的sql你說的這種情況,
AND
前後條件順序不影響查詢的效率,就是沒有區別的;既然這兩個字段都是查詢條件,可以建立一個聯合索引以提高查詢效率我記得以前的公司有個業務也是涉及到這個點,當時做實驗的結果是mysql的查詢是從右往左的,現在的話,應該優化了這個點,具體沒有做過實驗
和寫的順序沒有關係。
若建聯後索引的話,聯合索引中欄位的段序是會影響查詢效率的。基本原則是區分度大的欄位放在前面。 (測試了一下索引的順序很重要)
如果mysql的查詢規劃連這都做不到的話,mysql早就去死了