Mysql索引的優化(1)

2021-08-07 09:01:00 字數 2386 閱讀 4423

索引對資料的印象非常的關鍵

,索引的主要作用就是告訴儲存引擎如何快速的找到我們所需要的資料。當表的資料比較少時,查詢的頻率也比較低的情況下索引的作用可能還不是太明顯,因為這時候表中的資料差不多都可以快取到記憶體中。所以就算是全表掃瞄也不會太慢。而隨著表中的資料越來越多,查詢頻率也越來越高,記憶體已經不能完全快取資料的時候,索引的作用就會顯得越來越重要。據我了解大多數程式設計師總是忽略或過多的強調索引的作用就有

2種極端的表現一種就是除了主鍵沒有任何索引,另一種就是表中每一列都建立乙個索引。其實這兩種做法都是不正確的,太多或太少的索引都會對資料庫的效能帶來不好的影響,只有在正確的鏈上建立正確的索引才能增強資料庫的處理能力,為了能夠正確的使用索引我們先看看

mysql

支援的索引型別都有那些。 1

、mysql

支援的索引型別

上面我說索引的主要作用就是告訴儲存引擎如何快速的找到我們所需要的資料。所以

mysql

是在儲存引擎實現的不是在

mysql

的服務層實現的。這就決定了不同的儲存引擎不是都支援所有的索引型別。即使是同一種索引在不同的儲存引擎上其底層的實現也可能不相同,現在我們先看看

mysql

支援的索引型別以及它們的優缺點。 1.

1 b-tree

索引的特點(

b+樹結構儲存資料) b-

tree

索引是最常見的一種索引型別,通常我們所說的索引指的就是

b-tree

索引,它使用了

b+樹的結構來儲存資料,在

b+樹中每乙個葉子節點都包含乙個指向下乙個葉子節點的指標。這樣可以方便的葉子節點的遍歷。下面看看

b-tree

索引的特點

1.2 b-tree

索引的特點 1.

2.1 b-tree

索引以b+

樹的結構儲存資料

對於不熟悉資料結構的同學可能不明白什麼是

b+樹。下面我給個圖來說明下

b+樹的儲存結構是什麼樣子的。

呵呵!畢業多年估計

b+樹已經還給老師了吧

! 其實我也忘了,有興趣去看大學課程資料結構的書吧!。

從這張圖中可以看出

b+樹是一種平衡的查詢樹,每個葉子節點到根部的距離都是相同的,可以看出所有的節點都是按照鍵值的大小來順序存放的,以及各個節點是由指標進行連線的。上面說過索引的好處是可以方便的進行快速查詢。這就是典型的

b-tree

結構的儲存結構。但是對於不同的儲存引擎具體實現可能有所不同,比如

myisam

索引在葉子節點上是通過資料的物理位置來進行引用行的,而

innodb

則是通過主鍵來引用被索引的行的。 1.

2.2 b-tree

索引能夠加快資料的查詢速度

從上面圖中可以看出

b-tree

索引能夠加快查詢速度的,通常情況索引的大小遠小於表中資料的大小,使用了

b-tree

索引儲存引擎就不再需要全表掃瞄來獲取需要的資料了。取而代之的則是從索引的根節點開始進行搜尋,在索引的根節點中存放了指向下層子節點的指標,儲存引擎根據這個指標向下層進行查詢,通過比較節點頁的值和要查詢的值就會得到合適的指標進入下層的子節點。而這些指標實際上是定義了子節點中值的上限和下限所以呢最終儲存引擎要找到對應的值,要麼可以確定所查詢的值是不存在的,最終儲存引擎會通過

b-tree

樹索引找到符合要求的這個葉子節點。葉子節點比較特別它的指標指向被索引的資料而不是其他的葉子節點,前面說過在

innodb

儲存引擎中葉子節點儲存的是主鍵,而在

myisam

中葉子節點指向資料的實體地址。另外由於

b-tree

索引對資料是順序儲存的,所以

b-tree

索引最後乙個特點就是很適合範圍查詢。 1.

2.3 b-tee

索引更適合進行範圍查詢

所以這一點和

hash

索引有很大不同。每當我們建立索引時候就希望,查詢想我們所想象的那樣來使用這個索引,但是實際情況

mysql

有時候並不像我們所希望的那樣使用我們所建立的索引。那麼這其中就有很多原因。下面我們就來看看在什麼情況下用到

b樹索引 1.

3 在什麼情況下可以用到

b樹索引

1.3.1

全值匹配的查詢

就是指和索引中的所有列來進行匹配例如:

order_sn = '987632119900' 

。如果我們在訂單號

order_sn

上建立了乙個

b樹索引這時我們要查詢訂單號為

987632119900

,這樣的乙個訂單這樣就是進行的乙個全域性匹配的查詢。 1.

3.2

匹配最左字首的查詢

MySQL高階 索引優化案例1

1 員工表的建表語句 create table emps id int primary key auto increment,name varchar 20 not null default comment 姓名 age int not null default 0 comment 年齡 pos v...

mysql 優化 聚集索引 mysql 索引優化

一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...

mysql索引優化原則 MySQL 索引優化原則

索引優化原則 1 最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以任意調整。2 和in可以亂序,比如a 1 and b 2 and c ...