mysql索引介紹,sql優化

1.索引簡介

  1. 什麼是索引:MySQL官方對索引的定義爲:索引(Index)是幫助MySQL高效獲取數據的數據結構。
    可以得到索引的本質:索引是數據結構。
  2. 好處:類似大學圖書館建書目索引,提高數據檢索的效率,降低數據庫的IO成本,通過索引列對數據進行排序,降低數據排序的成本,降低了CPU的消耗
  3. 壞處:1.雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。
    因爲更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的字段,
    都會調整因爲更新所帶來的鍵值變化後的索引信息2.實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,所以索引列也是要佔用空間的
  4. mysql索引結構:B+Tree索引(後續的文章我會專門研究B+Tree索引這一數據結構,暫時先知道這個概念就行了)
  5. 聚簇索引與非聚簇索引:聚簇索引並不是一種單獨的索引類型,而是一種數據存儲方式。
    術語‘聚簇’表示數據行和相鄰的鍵值進錯的存儲在一起。
     如下圖,左側的索引就是聚簇索引,因爲數據行在磁盤的排列和索引排序保持一致。

聚簇索引的好處:
按照聚簇索引排列順序,查詢顯示一定範圍數據的時候,由於數據都是緊密相連,數據庫不不用從多個數據塊中提取數據,所以節省了大量的io操作。
聚簇索引的限制:
對於mysql數據庫目前只有innodb數據引擎支持聚簇索引,而Myisam並不支持聚簇索引。
由於數據物理存儲排序方式只能有一種,所以每個Mysql的表只能有一個聚簇索引。一般情況下就是該表的主鍵。
爲了充分利用聚簇索引的聚簇的特性,所以innodb表的主鍵列儘量選用有序的順序id,而不建議用無序的id,比如uuid這種。

 

2.索引分類

  1. 單值索引:即一個索引只包含單個列,一個表可以有多個單列索引,語法:CREATE  INDEX idx_customer_name ON customer(customer_name); 
  2. 唯一索引:索引列的值必須唯一,但允許有空值,語法:CREATE UNIQUE INDEX idx_customer_no ON customer(customer_no); 
  3. 主鍵索引:設定爲主鍵後數據庫會自動建立索引,innodb爲聚簇索引
  4. 複合索引:即一個索引包含多個列,語法:CREATE  INDEX idx_no_name ON customer(customer_no,customer_name); 

3.哪些情況下使用索引

4.哪些情況不使用索引

5.性能分析:Explain

6.各個名詞解釋

這一模塊先不介紹,以後再補

7.索引失效

7.1全值匹配我最愛:

7.2最佳左前綴法則:如果索引了多列,要遵守最左前綴法則。指的是查詢從索引的最左前列開始並且不跳過索引中的列。

 

以後再寫吧

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