1. 程式人生 > >MySql索引型別及其機制

MySql索引型別及其機制

一、MySql索引型別

Mysql目前主要有以下幾種索引型別:FULLTEXT,HASH,BTREE,RTREE。

Mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引

  1. FULLTEXT

即為全文索引,目前只有MyISAM引擎支援。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不過目前只有 CHAR、VARCHAR ,TEXT 列上可以建立全文索引。

全文索引並不是和MyISAM一起誕生的,它的出現是為了解決WHERE name LIKE “%word%"這類針對文字的模糊查詢效率較低的問題。

  1. HASH

由於HASH的唯一(幾乎100%的唯一)及類似鍵值對的形式,很適合作為索引。

HASH索引可以一次定位,不需要像樹形索引那樣逐層查詢,因此具有極高的效率。但是,這種高效是有條件的,即只在“=”和“in”條件下高效,對於範圍查詢、排序及組合索引仍然效率不高。

  1. BTREE

BTREE索引就是一種將索引值按一定的演算法,存入一個樹形的資料結構中(二叉樹),每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。這是MySQL裡預設和最常用的索引型別。

  1. RTREE

RTREE在MySQL很少使用,僅支援geometry資料型別,支援該型別的儲存引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種。

相對於BTREE,RTREE的優勢在於範圍查詢。

二、索引的機制

1.為什麼我們新增完索引後查詢速度為變快?

傳統的查詢方法,是按照表的順序遍歷的,不論查詢幾條資料,mysql需要將表的資料從頭到尾遍歷一遍

在我們新增完索引之後,mysql一般通過BTREE演算法生成一個索引檔案,在查詢資料庫時,找到索引檔案進行遍歷(折半查詢大幅查詢效率),找到相應的鍵從而獲取資料

2.索引的代價

  • 建立索引是為產生索引檔案的,佔用磁碟空間
  • 索引檔案是一個二叉樹型別的檔案,可想而知我們的dml操作同樣也會對索引檔案進行修改,所以效能會下降

3.在哪些column上使用索引?

  • 較頻繁的作為查詢條件欄位應該建立索引
  • 唯一性太差的欄位不適合建立索引,儘管頻繁作為查詢條件,例如gender性別欄位
  • 更新非常頻繁的欄位不適合作為索引
  • 不會出現在where子句中的欄位不該建立索引

總結: 滿足以下條件的欄位,才應該建立索引.

a: 肯定在where條經常使用 b: 該欄位的內容不是唯一的幾個值 c: 欄位內容不是頻繁變化。