Mysql性能優化之索引

left join時可能會導致mysql不走索引的一些原因:

1.關聯兩張表字符集不一樣會導致mysql不走索引;

2.select查詢字段太多會導致不走索引;



聚族索引

索引的主要目的是爲了加快查詢的速度,索引一般使用b-tree結構實現,其索引列信息位於葉子節點上

且索引列只包含整列數據的位置,但並不包含此索引列相關的數據。聚族索引與其他索引不同,在他的

索引列上包含了此列的完整數據信息,因此可以通過聚族索引直接找到對應的數據,而不需要再去通過

索引信息去磁盤尋找數據信息(這樣會減少磁盤訪問量)。


覆蓋索引

覆蓋索引就是根據聚族索引的優勢,對查詢的列建立一個覆蓋的索引列信息,這樣索引中就包含了要

查詢的數據信息,這樣也可以避免再去通過索引查找對應的完整數據列。

因此可以通過覆蓋所以優化查詢速度,但是又不宜對太多字段建立覆蓋索引,此時有個折中方法,先查詢

可以使用覆蓋索引訪問的列,然後對查詢的數據join關聯,從而查找出需要的完整信息。

-- 如果通過覆蓋索引從大量的數據中只返回少量的數據,這時通過join獲取完整信息比直接查詢完整信息效率高;

-- 如果通過覆蓋索引從大量的數據中返回大量的數據,這時與不使用覆蓋索引沒什麼區別;

-- 如果只有少量的數據,則直接查詢會比較省時。



聚族索引和二級索引

mysql中每個表都有一個聚簇索引(clustered index ),除此之外的表上的每個非聚簇索引都是二級索引,又叫輔助索引(secondary indexes)。

以InnoDB來說,每個InnoDB表具有一個特殊的索引稱爲聚集索引。如果表存在主鍵,該主鍵索引是聚集索引。如果未定義主鍵,MySQL取第一個唯一索引(unique)而且只含非空列(NOT NULL)作爲主鍵,InnoDB使用它作爲聚集索引。如果沒有這樣的列,InnoDB就自己產生一個這樣的ID值,它有六個字節,而且是隱藏的,使其作爲聚簇索引。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章