高效能MySQL 第五章建立高效能的索引(1)

2022-08-05 10:48:14 字數 995 閱讀 9889

在mysql中,儲存引擎使用索引,其先在索引中找到對應值,然後根據匹配的索引記錄找到對應的資料行。

索引可以包含乙個或多個列的值。

一、索引的型別

在mysql中,索引是在儲存引擎層而不是伺服器層實現的。

mysql支援的索引型別

b-tree索引

innodb使用的是b+tree。

b-tree通常意味著所有的值都是按順序儲存的,並且每乙個葉子頁到根的距離相同。b-tree索引能夠加快訪問資料的速度,因為儲存引擎不再需要進行全表掃瞄來獲取需要的資料,取而代之的是從索引的根節點開始進行搜尋。根節點的槽中存放了指向子節點的指標,儲存引擎根據這些指標向下層查詢。通過比較節點頁的值和要查詢的值可以找到合適的指標進入下層子節點,這些指標實際上定義了子節點頁中值的上限和下限。最終儲存引擎要麼是找到對應的值,要麼該記錄不存在。

葉子節點比較特別,它們的指標指向的是被索引的資料,而不是其他的節點頁。

可以使用b-tree索引的查詢型別。b-tree索引適用於全鍵值、鍵值範圍或鍵字首查詢。其中鍵字首查詢只適用於根據最左字首的查詢。對以下型別的查詢有效:

全值匹配:指的是和索引中的所有列進行匹配。

匹配最左字首:也可以只匹配某一列的值的開頭部分。

匹配範圍值。

精確匹配某一列並範圍匹配另外一列

只訪問索引的查詢:即查詢只需要訪問索引,而無須訪問資料行。

雜湊索引

雜湊索引(hash index)基於雜湊表實現,只有精確匹配索引所有列的查詢才有效。對於每一行資料,儲存引擎都會對所有的索引列計算乙個雜湊碼(hash code),雜湊碼是乙個較小的值,並且不同鍵值的行計算出來的雜湊碼也不一樣。雜湊索引將所有的雜湊碼儲存在索引中,同時在雜湊表中儲存指向每個資料行的指標。

空間資料索引(r-tree)

myisam表支援空間索引,可以用作地理資料儲存。空間索引會從所有維度來索引資料。查詢時,可以有效的使用任意維度來組合查詢。必須使用mysql的gis相關函式如mbrcontains()等來維護資料。

全文索引

高效能MySQL 第五章建立高效能的索引(2)

高效能的索引策略 一 獨立的列 如果查詢中的列不是獨立的,則mysql就不會使用索引。獨立的列 是指索引列不能是表示式的一部分,也不能是函式的函式。二 字首索引和索引選擇性 索引部分字元會降低索引的選擇性,索引的選擇性是指,不重複的索引值 也稱為基數,cardinality 和資料表的記錄總數 t ...

高效能mysql 第五章索引(3)

myisam使用字首壓縮來減少索引的大小,預設只壓縮字串,但是通過設定也可以對整數做壓縮。壓縮可以使用更少的空間,代價是某些操作可能更慢。特別是倒序的查詢,測試表明,對於cpu密集型的應用,查詢會很慢,特別是倒序。對於i o密集型應用,查詢可能會不錯。可以在create table的語句中指定pac...

索引的底層實現 高效能Mysql(第五章筆記2)

b 樹索引的使用 我們日常使用中,索引可以引用了很多列,而不是單一列的索引。1 如果不是按照索引的最左列開始查詢,則無法使用索引。2 不能跳過索引中的列,否則生效的只能是索引左側沒跳過的列。3 如果查詢中有某個列是範圍查詢,則其右邊的列都無法使用索引優化查詢。上面三條意味著,索引中列的順序,至關重要...