表 tb_user 資料3000萬,欄位 email 和 emailvalid,其中欄位 emailvalid 為索引。
以下2條SQL效能是否有區別, emailvalid 和email的順序調換的話
sqlselect * from tb_user where emailvalid=1 and email='test@gmail.com'select * from tb_user where email='test@gmail.com' and emailvalid=1
2015-6-4 補充:複合索引是這種嗎?
回複內容:
表 tb_user 資料3000萬,欄位 email 和 emailvalid,其中欄位 emailvalid 為索引。
以下2條SQL效能是否有區別, emailvalid 和email的順序調換的話
sqlselect * from tb_user where emailvalid=1 and email='test@gmail.com'select * from tb_user where email='test@gmail.com' and emailvalid=1
2015-6-4 補充:複合索引是這種嗎?
有區別,第二個查詢無法切中索引,推薦explain來判斷自己的select是否高效。
Where中的順序對最佳化沒有影響。
其中欄位 emailvalid 為索引
但如果emailvalid的值只是0或1的話, 該索引沒有什麼價值。應該以email為索引。
理論上第二種的形式會比第一種好,如果你的索引類型是b-tree的話。
你這種情況需要建立複合索引來解決吧,兩個欄位同時構成一個索引,這樣也會大大減少查詢的時間。
個人覺得是第一種才會有效果,mysql內部先識別了emailvalid的值,再去匹配email的欄位,然後第一個作為索引起作用了。
正如@品第所說的,emailvalid你建立好索引但是值規定了0和1,然後這樣耦合性太強的索引作用很低,甚至是沒有