索引的基礎

2021-10-02 08:03:55 字數 1614 閱讀 8070

1.索引的定義:

索引是儲存引擎

用於快速找到記錄的一種資料結構。

索引可以包含乙個或多個列的值。如果索引包含多個列,那麼列 的順序也十分重要,因為mysql只能高效地使用索引的最左字首列

2.索引的型別

b-tree索引

【實際上很多的儲存引擎使用的是b+tree,b+樹是自平衡的多叉搜尋樹,即每乙個葉子節點都包含只想下乙個葉子結點的指標,從而方便葉子結點的範圍遍歷】innodb預設的使用b+樹

b-tree索引能夠加快訪問資料的速度,因為儲存引擎不再需要進行全表掃瞄來獲取需要的資料,取而代之的是從索引的根節點開始進行搜尋。根節點的槽中存放了指向子節點的指標,儲存引擎根據這些指標向下層查詢。索引對多個值進行排序的依據是create table語句中定義索引列的順序

索引的匹配:

(1)全值匹配:指的是和索引中所有的列進行匹配;

(2)最左字首匹配:例如找出在學生表中找出姓唐的學生;

(3)匹配列字首:也可以值匹配某一列的值的開頭部分;

在mysql中只有memory儲存引擎支援雜湊索引

雜湊索引的特點:

(1)雜湊索引只包含雜湊值和行指標,而不儲存字段值,所以不能使用索引中的值來避免讀取行。不過,訪問記憶體中的行的速度很舉哀,所以大部分情況下這一點對效能的影響不明顯;

(2)雜湊索引資料並不是按照索引值順序儲存的,所以也就無法用於排序;

(3)雜湊索引也不會支援部分索引列匹配查詢,因為雜湊索引始終是使用索引列的全部內容來計算雜湊值的。例如,在資料列(a,b)上建立雜湊索引,如果查詢只有資料列a,則無法使用該索引。

(4)雜湊索引只支援等值比較查詢,包括=、in()、<=>,也不支援任何範圍查詢;

(5)訪問雜湊索引的資料非常快,除非有很多雜湊衝突(不同的索引列值卻有相同的雜湊值)。當出現雜湊衝突的時候,儲存引擎必須遍歷鍊錶所有的行指標,逐行進行比較,知道找到所有符合條件的行;

(6)如果雜湊衝突很多的話,一些索引維護操作的代價也會很高。例如,如果在某個選擇性很低(雜湊衝突很多)的列上建立雜湊索引,那麼當從表中刪除一行時,儲存引擎需要遍歷對應雜湊值的鍊錶中的每一行,找到並刪除對應行的引用,衝突越多,代價越大

innodb中的自適應雜湊索引

當innodb注意到某些索引值被使用得非常頻繁時,它會在記憶體中基於b-tree索引之上再建立乙個雜湊索引,這樣就讓b- tree索引也具有雜湊索引的一些優點,比如快速的雜湊查詢。這是乙個完全自動的、內部的行為,使用者無法控制或者配置,不過如果有必要,也完全可以關閉該功能。

空間資料索引

myisam表支援空間資料索引,可以用作地理資料儲存。b-tree索引不同,這類索引無須字首查詢。空間索引會從所有維度來索引資料。查詢時,可以有效地使用任意維度來組合查詢。必須使用mysql的gis相關函式來維護資料。

全文索引

索引的優點:

(1)索引大大減少了伺服器需要掃瞄的資料量;

(2)索引可以幫助伺服器避免排序和臨時表;

(3)索引可以將隨機i/o變為順序i/o

聚簇索引:

innodb 的聚簇索引實際上在同乙個結構中儲存了b-tree索引和資料行。當表有聚簇索引時,它的資料行實際上存放在索引的葉子中。術語「聚簇」表示資料行和相鄰的值緊湊的儲存在一起。因為無法同事把資料行存放在兩個不同的地方,所以乙個表只能有乙個聚簇索引

mysql索引基礎 Mysql 索引基礎

什麼是索引?為什麼要建立索引?索引,其實就是目錄。索引,用於快速找出在某個列中有某個特定值的行。不使用索引,mysql必須從第一條記錄開始查詢整張表,直到找出相關的行,那麼表越大,查詢資料所花費的時間就越多。假如表中查詢的列有乙個索引 目錄 mysql能夠快速定位到達乙個位置去搜尋資料檔案,而不必查...

MySQL索引(一)索引基礎

索引是資料庫系統裡面最重要的概念之一。一句話簡單來說,索引的出現其實是為了提高資料查詢的效率,就像書的目錄一樣。索引的出現是為了提高查詢效率,但是實現索引的方式卻有很多種,這裡就介紹三種常見 也比較簡單的資料結構,它們分別是雜湊表 有序陣列和搜尋樹。雜湊表雜湊表是一種以key value儲存資料的結...

倒排索引基礎

搜尋引擎的索引 單詞 文件矩陣是表達兩者之間所具有的一種包含關係的概念模型,圖3 1展示了其含義。圖3 1的每列代表乙個文件,每行代表乙個單詞,打對勾的位置代表包含關係。圖3 1 單詞 文件矩陣 從縱向即文件這個維度來看,每列代表文件包含了哪些單詞,比如文件1包含了詞彙1和詞彙4,而不包含其它單詞。...