mysql索引使用

1.獨立的列:
    索引不能使表達式的一部分,也不能是函數的參數。
    在where條件中,應該始終將索引列放在比較符號的一側。
 
2.前綴索引和索引的選擇性:
    有時候須要索引很長的字符列,會讓索引大且慢。
        除了使用在索引上創建哈希索引,還能夠索引開始的部分字符。
        對於BLOB,TEXT或很長的VARCHAR類型來講,必須使用前綴索引,MySQL不容許索引這些列的完整長度。
 
3.多列索引:
    常見錯誤:爲每一個列建立獨立索引,或者按照錯誤的順序建立多列索引。
    若是在EXPLAIN中看到有索引合併,應當好好檢查查詢和表的結構,也能夠經過參數optimizer_switch來關閉索引合併功能,或者使用IFNORE INDEX提示優化器忽略某些索引。
 
4.選擇合適的索引列順序
    一般把選擇性最高的列放在前面是很好的。
    可能須要根據運行頻率來調整索引列的順序。
    
5.聚簇索引
     聚簇索引並非一種單獨的索引類型,而是一種數據存儲方式
     一個表只能有一個聚簇索引,不是全部的存儲引擎都支持聚簇索引
     聚簇索引結構:葉子頁包含了行的所有數據,節點頁只包含索引列。
     MySQL經過主鍵來彙集數據,沒有定義主鍵,會選擇一個惟一的非空索引代替,若是沒有這樣的索引,innodb會隱式定義一個主鍵做爲聚簇索引
     爲何二級索引須要兩次索引查找?
          二級索引葉子節點中保存的不是指向行的物理位置的指針,而是行的主鍵值。這麼作的好處是在innodb移動行時無需更新二級索引中的指針,壞處是佔用了更多的空間。
     OPTIMIZE TABLE指令:從新使用未使用的空間,整理文件碎片。
          刪除數據後,MySQL不會回收被刪除數據佔用的空間以及索引位,而是空在那裏,等待新的數據填充。
相關文章
相關標籤/搜索