MySQL學習筆記(三)索引

2021-09-03 01:55:00 字數 1681 閱讀 4878

索引

簡介索引是乙個單獨的、儲存 在磁碟上的資料庫結構,他們包含著對資料表裡所有記錄的引用指標。使用索引用於快速找出在某個或多個列有一特定值的行,所有mysql列型別都可以被索引,對相關列使用索引是提高查詢操作速度的最佳途徑。

索引的優點

可以大大加快資料的查詢速度。

在實現資料的參考完整性方面,可以加速表和表之間的連線。

在使用分組和排序子句進行資料查詢時,也可以顯著減少查詢中分組和排序的時間。

主鍵索引的葉子結點儲存了整一行的內容(聚簇索引),使用主鍵可以快速獲取到整行的資料。

索引的缺點

建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加。

索引需要佔磁碟空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果有大量的索引,索引檔案可能比資料檔案更快達到最大檔案尺寸。

當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

索引的設計原則

索引並非越多越好。過多的索引會占用大量記憶體空間,而且會影響增刪改的效能。

避免對經常更新的表建立過多的索引,並且索引中的列要盡可能少。

資料量的表最好不要建立索引,由於資料較少,查詢花費的時間可能比遍歷索引的時間還要短。

在條件表示式中經常用到的不同值較多的列上建立索引。如學生表中的『性別』列,只有「男」,「女」兩個值,就無需建立索引。

在頻繁進行排序和分組的列上建立索引,如果待排序的列有多個,可以在這些列上建立組合索引。

對於字串型別的字段進行索引,如果可能應該指定乙個字首長度。如果有乙個char(255)的列 在前10個或前30個字元內,多數值是唯一的,則不需要對整個列建立索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間,減少i/o操作。

索引優化

慢查詢日誌:會記錄所有執行時間超過long_query_time的所有查詢或不使用索引的查詢,所以可以根據慢查詢日誌進行對應sql語句優化。

使用覆蓋索引:覆蓋索引即查詢的所有列都有索引,使用覆蓋索引可以減少大量回表操作,也會可以進行範圍查詢減少磁碟io。

(回表操作:先索引掃瞄,再通過主鍵去取索引中未能提供的資料,即為回表)

回表操作解釋

索引順序:將選擇性高的索引放在前面,可以過濾大多數索引。如果已有(a,b)索引 就不需要再維護乙個a索引。

定期清除過時索引:維護索引需要耗費系統大量資源,尤其是當表中資料比較多得時候。

盡量拓展索引而不是新建索引。

不會使用索引的情況

使用like 關鍵字進行查詢的查詢語句中,如果匹配字串的第乙個字元為「%」,索引不會起作用。只有「%」不在第乙個位置,索引才會起作用。

使用多列索引時,只有在查詢條件中使用了這些欄位的第乙個欄位時,索引才會被使用。最左匹配原則。

ex:create index index_id_price on fruits(f_id,f_price);

select * from fruits where f_id=『12』;

此時會使用索引

select * from fruits where f_price=5.2;

此時不會使用索引

索引列不能是表示式的一部分,也不能是函式的引數。

ex: select * from table where id-1>4;

此時id是表示式的一部分 就不會使用索引。

MySQL學習筆記(三) 索引

tips 索引是能提高幫助mysql高效獲取資料的一種資料結構。例如 在10000條資料中查詢某條資料,若沒有索引,則需以遍歷的方式查詢該資料資訊 若有索引,則可通過一定的資料結構儲存方式查詢,以提高查詢效率。1 定義 是最基本的索引,它沒有任何限制。2 實現 1.直接建立索引 create ind...

Mysql學習筆記三 索引

在關聯式資料庫中,如果有上萬甚至上億條記錄,在查詢記錄的時候,想要獲得非常快的速度,就需要使用索引。索引是關聯式資料庫中對某一列或多個列的值進行預排序的資料結構。通過使用索引,可以讓資料庫系統不必掃瞄整個表,而是直接定位到符合條件的記錄,這樣就大大加快了查詢速度。例如,對於students表 idc...

MYSQL索引 學習筆記

索引分類 索引失效 索引帶來的弊端 幫助mysql進行高效查詢的資料結構 有序 在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引 換言之,索引就是某種資料結構 如下圖所示 左邊是資料...