《MySQL索引實戰匯總》要點:
本文介紹了MySQL索引實戰匯總,希望對您有用。如果有疑問,可以聯系我們。
MySQL索引對數據檢索的性能至關重要,盲目的增加索引不僅不能帶來性能的提升,反而會消耗更多的額外資源,本篇總結了一些MySQL索引實戰經驗.
索引是用于快速查找記錄的一種數據結構.索引就像是數據庫中數據的目錄,數據庫在查詢時,首先在索引中找到匹配的值,然后根據這個匹配值找到對應的數據行.
聚簇索引
聚簇索引的順序便是數據的物理存儲順序,索引中數據域存儲的便是實際的數據,一個表最多只能有一個聚簇索引,適用于查詢多行數據,不適用于頻繁修改的列,一般在主鍵上創建.
非聚簇索引
索引順序與數據物理排列順序無關,索引中存儲的內容為實際數據的地址,適應于查詢單行數據.
普通索引
即平時創建的普通索引.
唯一索引
索引所在的列或列組合的值是全表唯一的.
全文索引
MySQL從3.23.23版開始支持全文索引,它查找的是文中的關鍵詞,而不是直接比擬索引中的值.
單列索引
在單列上創建的索引.
組合索引
在多個列上創建的索引.
最左前綴
where子句中有a、b、c三個查詢條件,創建一個組合索引abc(a,b,c),最左前綴的概念是說以組合索引最左邊的列a組合成的查詢條件,如(a,b,c)、(a,b)、(a,c),這三種情況的查詢條件都會使用abc索引,和where子句中a、b、c出現的順序沒關系,可以是where c=? and b=? and a=?,但(b,c)組合不會使用索引,即where c=? and b=?.
1.經常作為查詢條件的列;
2.經常作為排序條件的列;
3.經常作為join條件的列;
4.經常被查詢的列.
1.數據頻繁被修改的列,數據被修改,索引必要做相應的修改,消耗資源;
2.區分度不是很高的列,如性別,列值重復性太大,索引效果不是很明顯;
3.不是經常被作為查詢條件、排序條件、連接條件的列.
1.列上進行函數計算將不會使用索引;
2.對于創建索引的列,避免存儲NULL,NULL會使索引更加復雜、效率變低,可以使用NOT NULL進行約束;
3.對于模糊查詢like '%abc%',將不會使用索引,而like 'abc%'將會使用索引;
4.對于not in、not exists、!=等負向查詢將不會使用索引;
5.每次查詢只使用一個索引,如果where條件使用了索引,order by將不再使用索引;
6.對于where子句中有多個查詢條件的,單列索引的效率不如復合索引,因為查詢每次只能使用一個索引;
7.MySQL只對以下操作符才使用索引:<、<=、=、>、>=、between、in,但是必要注意in的范圍值不要太多;
8.union all可以使用索引,但自己效率不是很高,不建議使用;
9.列上進行類型轉換的將不會使用索引;
10.老版本MySQL對OR條件不使用索引,新版本才支持,不建議使用OR.
關于索引的實戰經驗總結后續還會賡續更新.
歡迎參與《MySQL索引實戰匯總》討論,分享您的想法,維易PHP學院為您提供專業教程。