索引創建的原則


1、索引分四類:

index ---- 普通索引,數據可以重復
fulltext ---- 全文索引,用來對大表的文本域(char,varchar,text)進行索引
unique ---- 唯一索引,要求所有記錄都唯一
primary key ---- 主鍵索引,也就是在唯一索引的基礎上相應的列必須為主鍵

2、使用索引需注意:

(1). 只對 where 和order by 需要查詢的字段設置索引,避免無意義的硬盤開銷;
(2). 組合索引支持前綴索引;
(3). 更新表的時候,如增刪記錄,MySQL會自動更新索引,保持樹的平衡;因此更多的索引意味着更多的維護成本

3、索引建立原則

(1). 盡量減少like,但不是絕對不可用,”xxxx%” 是可以用到索引的
(2). 表的主鍵、外鍵必須有索引
(3). 誰的區分度更高(同值的最少),誰建索引,區分度的公式是count(distinct(字段))/count(*)
(4). 單表數據太少,不適合建索引
(5). where,order by ,group by 等過濾時,后面的字段最好加上索引
(6). 如果既有單字段索引,又有這幾個字段上的聯合索引,一般可以刪除聯合索引;
(7). 聯合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:
(8). 聯合索引: mysql 從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index(a,b,c). 可以支持 a|a,b|a,b,c 3種組合進行查找,但不支持 b,c 進行查找.當最左側字段是常量引用時,索引就十分有效。
(9). 前綴索引: 有時候需要索引很長的字符列,這會讓索引變得大且慢。通常可以索引開始的部分字符,這樣可以大大節約索引空間,從而提高索引效率。其缺點是不能用於ORDER BY和GROUP BY操作,也不能用於覆蓋索引 Covering index(即當索引本身包含查詢所需全部數據時,不再訪問數據文件本身)。
(10). NULL會導致索引形同虛設

4、禁用索引

- like “ %xxx ”
- not in , !=
- 對列進行函數運算的情況(如 where md5(password) = “xxxx”)
- WHERE index=1 OR A=10
- 存了數值的字符串類型字段(如手機號),查詢時記得不要丟掉值的引號,否則無法用到該字段相關索引,反之則沒關系

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM