索引
儲存引擎用於快速找到記錄的一種資料結構。
索引型別
索引有很多種型別,如:b-tree索引、雜湊索引、空間資料索引r-tree 、全文索引、主鍵索引等,在mysql
中,索引是在儲存引擎層而不是伺服器層實現的。所以沒有統一的索引標準——不同儲存引擎的索引工作方式並
不一樣,也不是所有儲存引擎都支援所有型別的索引。即使多個儲存引擎支援同一種型別的索引,其底層實現
也可能不一樣。
b-tree索引
討論索引的時候,如果沒有特別的指明型別,那麼多半說的是b-tree索引,它使用b-tree資料結構來儲存資料。
實際很多儲存引擎使用的是b+tree,即每乙個葉子節點都包含指向下乙個葉子節點的指標,從而方便葉子節點
的範圍遍歷。
儲存引擎不同的方式使用b-tree索引,效能也各有不同,各有優劣。如:myisam使用字首壓縮技術使得索引更小,
但是innodb則按照原資料格式進行儲存。 myisam索引通過資料的物理位置引用被索引的行,而innodb則根據主鍵
引用被索引的行
b-tree索引查詢型別
b-tree適用於全鍵值、鍵值範圍,或者鍵字首查詢。
雜湊索引
hash index 基於雜湊表實現,只有精確匹配索引所有列的查詢才有效。對於每一行資料,儲存引擎都會對所有的索引列計算
乙個雜湊碼,雜湊碼是乙個較小的值,並且不同鍵值的行計算出來的雜湊碼也不一樣。雜湊索引將所有的雜湊碼儲存在索引中,
同時在雜湊表中儲存指向每個資料行的指標。
innodb引擎有乙個特殊功能叫「自適應雜湊索引,當innodb某些索引值被使用得非常頻繁時,也在記憶體中基於b-tree索引之上
再建立乙個雜湊索引。這樣就讓btree索引也具有雜湊索引的一些優點。這是乙個完全自動的,內部的行為,使用者無法控制或者
配置,不過如果有必要完全可以關閉該功能。
建立自定義的hash index
select id from url_tbl where url=""
select id from url_tbl where url_crc=crc32("")
如果採用這種方式,記住不要使用sha1和md5()作為雜湊函式,因為這兩函式計算出非常長的字串,會浪費大量的空間,比較時
也會更慢。兩函式設計目標是最大限度消除衝突,但這裡並不需要這樣高的要求。如果資料表非常大,crc32會出現大量的雜湊衝突,
則可以考慮自己實現乙個簡單的64痊雜湊函式。
r-tree
myisam引擎支援空間索引,可以用作地理資料儲存。
全文索引
一樣。它有很多需要注意的,如停用詞、詞幹、複數、布林搜尋等。
索引的優點
索引可以讓伺服器快速定位到表的指定位置。b-tree索引,按照順序儲存資料,可以用於order by 和group by 操作。因為資料是
索引大大減少了伺服器掃瞄的資料量
索引可以幫助伺服器避免排序和臨時表
將隨機io變為順序io
6 mysql索引 6 MySQL高階 索引
索引 1.思考 在圖書館中是如何找到一本書的?一般的應用系統對比資料庫的讀寫比例在10 1左右 即有10次查詢操作時有1次寫的操作 而且插入操作和更新操作很少出現效能問題,遇到最多 最容易出問題還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重 2.解決辦法 當資料庫中資料量很大時,查詢資料會...
6 mysql索引 6 MySQL索引種類
1 普通索引 這是最基本的索引,它沒有任何限制,比如上文中為title欄位建立的索引就是乙個普通索引,myiasm中預設的btree型別的索引,也是我們大多數情況下用到的索引。直接建立索引 create index index name on table name column length 修改表...
C 問題6 Mysql索引分類
mysql索引包括普通索引 唯一索引 全文索引 單列索引 多列索引 空間索引 即不應用任何限制條件的索引,該索引可以在任何資料型別中建立。字段本身的約束條件可以判斷其值是否為空或唯一。使用unique引數可以設定唯一索引。建立該索引時,索引的值必須唯一。主鍵是一種特殊唯一索引。使用fulltext引...