程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> 高性能MySql閱讀筆記第五章--創建高性能的索引1

高性能MySql閱讀筆記第五章--創建高性能的索引1

編輯:MYSQL入門知識

創建高性能的索引1

索引是存儲引擎用於快速找到記錄的一種數據結構,這是索引的基本功能。

索引對於良好的性能非常重要。

索引優化應該是對查詢性能優化最有效的手段了,索引能夠輕易將查詢性能提高幾個數量級,“最優”的索引有時比一個“好的”索引性能好兩個數量級,創建一個真正“最優”的索引經常需要重寫查詢。

一、索引的類型

1.B樹索引

當人們談論索引的時候,如果沒有特別指明類型,那麼多半說的是B樹索引,他使用B樹數據結構存儲數據。

可以使用B樹索引的查詢類型:全值匹配、匹配最左前綴、匹配列前綴、匹配范圍值、精確匹配一列並范圍匹配另一列、只訪問索引的查詢。

B數樹索引的限制:如果不是按照索引的最左列開始查找,則無法使用索引、不能跳過索引中的列、如果查詢中有某個列的范圍查詢,則其右邊所有列都無法使用索引優化查詢。

2.哈希索引

在MySql中,只有Memory引擎顯示支持哈希索引。

哈希索引只包含哈希值和行指針,而不存儲字段值,所以不能使用索引中的值來避免讀取行。

哈希索引數據並不是按照索引值順序存儲的,所以也就無法用於排序。

哈希索引也不支持部分索引列匹配查找,因為哈希索引始終是使用索引列的全部內容來計算哈希值的。

哈希索引只支持等值比較查詢。

訪問哈希索引的數據非常快,除非有很多哈希沖突。

如果哈希沖突很多的話,一些索引維護操作的代價也會很高。

 

InnoDB引擎有一個特殊的功能叫做“自適應哈希索引”,當InnoDB注意到某些索引值被使用的非常頻繁時,他會在內存中基於B樹索引之上再創建一個哈希索引。

如果存儲引擎不支持哈希索引,可以模擬像InnoDB一樣創建哈希索引,這可以享受一些哈希索引的便利,例如只需要很小的索引就可以為超長的鍵創建索引。

 

3.空間數據索引(R樹)

MyISAM表支持空間索引,可以用作地理數據存儲。

4.全文索引

全文索引是一種特殊類型的索引,他查找的是文本中的關鍵詞,而不是比較索引中的值。在相同的列上同時創建全文索引和基於值的B樹索引不會有沖突,全文索引適用於MATCH AGAINST 操作,而不是普通的WHERE條件操作。

5.其他索引類別

還有很多第三方的存儲引擎使用不同類型的數據結構來存儲索引,例如TokuDB使用分形樹索引(fractal tree index)。

二、索引的優點

索引可以讓服務器快速地定位到表的指定位置。但是這並不是索引的唯一作用。

1.索引大大減少了服務器需要掃描的數據量。

2.索引可以幫助服務器避免排序和臨時表。

3.索引可以將隨機I/O變為順序I/O。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved