索引在mysql調優中佔著至關重要的作用,所以深入了解索引對我們來說也是非常重要1.1索引是什麼?
mysql官方對索引的定義:索引(index)是幫助mysql高效獲取資料的資料結構。因此索引的本質就是資料結構。索引的目的在於提高查詢效率,可模擬字典、書籍的目錄等這種形式,可以簡單理解為排好序的快速查詢的資料結構。
除資料庫本身資料以外,mysql還維護著乙個滿足特定查詢演算法的資料結構,這種資料結構以某種方式指向資料本身,這樣就可以在資料結構的基礎上實現高階查詢演算法,這種資料結構就是索引。1.2索引的優缺點一般來說索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以磁碟檔案的形式儲存在磁碟上。
平常來說,一般索引沒有特別指明,都是b樹(多路搜尋樹,不一定是二叉樹)索引,其中聚集索引、次要索引、覆蓋索引、字首索引、唯一索引預設都是用b樹,除了b樹索引之外,還有雜湊索引(hash index)。
優點:
類似新華字典的目錄,大大提高了檢索效率。
通過索引列對資料進行排序,降低資料的排序成本,從而降低cpu的消耗
缺點:
實際上索引也是一張表,儲存了主鍵和索引字段,並指向實體表的記錄,所以索引也是佔空間的。
雖然索引大大提高了檢索速度,但是會降低對insert,update語句操作的效率,因為除了每次要更新資料,還要更新和維護對應的索引檔案。
總結:索引只是mysql高效的乙個因素,如果你的mysql有大量的資料表,就需要花時間研究建立最優秀的索引或優化查詢語句。
1.3索引的分類
型別分類:
mysql目前主要有以下幾種索引型別:fulltext,hash,btree,rtree。
fulltext
即為全文索引,目前只有myisam引擎支援。其可以在create table ,alter table ,create index 使用,不過目前只有 char、varchar ,text 列上可以建立全文索引。全文索引並不是和myisam一起誕生的,它的出現是為了解決where name like 「%word%"這類針對文字的模糊查詢效率較低的問題。
hash
由於hash的唯一(幾乎100%的唯一)及類似鍵值對的形式,很適合作為索引。hash索引可以一次定位,不需要像樹形索引那樣逐層查詢,因此具有極高的效率。但是,這種高效是有條件的,即只在「=」和「in」條件下高效,對於範圍查詢、排序及組合索引仍然效率不高。
btree
btree索引就是一種將索引值按一定的演算法,存入乙個樹形的資料結構中(二叉樹),每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。這是mysql裡預設和最常用的索引型別。
rtree
rtree在mysql很少使用,僅支援geometry資料型別,支援該型別的儲存引擎只有myisam、bdb、innodb、ndb、archive幾種。相對於btree,rtree的優勢在於範圍查詢。
種類分類:
單值索引(普通索引):即乙個索引只包含單個列,乙個表裡可以有多個單值索引。
主鍵索引:即主鍵自動建立主鍵索引,唯一不重複且不能為null值
唯一索引:唯一重複可以為null值
復合索引:即乙個索引包含多個列
1.4語法
-- 建立索引
create
[unique
]index indexname on tablename(columnname(length));
-- 刪除索引``
`drop
index indexname on tablename;
-- 檢視索引
show
index
from tablename;
注:如果是char、varchar型別的字段,length可以小於字段實際長度;如果是blob、text型別,必須指定length。1.5索引的建立時機
哪些情況需要建立索引:
主鍵自動建立主鍵索引
經常作為查詢條件的字段應該建立索引
與其他表有關聯關係的字段應該建立索引
查詢中的需要排序的字段需要建立索引,排序字段如果通過索引來訪問將大大提高排序速度。
查詢中需要分組或者統計的字段
高併發下趨向建立復合索引
哪些情況不需要建立索引:
表記錄太少(例如表裡只有幾千條資料的,mysql完全可以搞定,加索引還會適得其反)
頻繁增刪改的表(mysql需要維護索引檔案)
資料重複且分布平均的字段(例如性別,國籍等字段)
頻繁更新的字段
where條件用不到的字段
MySQL高階知識(三) 索引
mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構。因此索引的本質就是資料結構。索引的目的在於提高查詢效率,可模擬字典 書籍的目錄等這種形式。可簡單理解為 排好序的快速查詢資料結構 在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式指...
mysql高階索引 Mysql高階 索引優化全解
是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...
mysql高階 索引
mysql官方對索引的定義 索引 index 是幫助mysql高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...