mysql高階 三 索引

2021-10-01 10:41:03 字數 2702 閱讀 2959

索引在mysql調優中佔著至關重要的作用,所以深入了解索引對我們來說也是非常重要

1.1索引是什麼?

mysql官方對索引的定義:索引(index)是幫助mysql高效獲取資料的資料結構。因此索引的本質就是資料結構。索引的目的在於提高查詢效率,可模擬字典、書籍的目錄等這種形式,可以簡單理解為排好序的快速查詢的資料結構

除資料庫本身資料以外,mysql還維護著乙個滿足特定查詢演算法的資料結構,這種資料結構以某種方式指向資料本身,這樣就可以在資料結構的基礎上實現高階查詢演算法,這種資料結構就是索引。

一般來說索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以磁碟檔案的形式儲存在磁碟上。

平常來說,一般索引沒有特別指明,都是b樹(多路搜尋樹,不一定是二叉樹)索引,其中聚集索引、次要索引、覆蓋索引、字首索引、唯一索引預設都是用b樹,除了b樹索引之外,還有雜湊索引(hash index)。

1.2索引的優缺點

優點

類似新華字典的目錄,大大提高了檢索效率。

通過索引列對資料進行排序,降低資料的排序成本,從而降低cpu的消耗

缺點

實際上索引也是一張表,儲存了主鍵和索引字段,並指向實體表的記錄,所以索引也是佔空間的。

雖然索引大大提高了檢索速度,但是會降低對insert,update語句操作的效率,因為除了每次要更新資料,還要更新和維護對應的索引檔案。

總結:索引只是mysql高效的乙個因素,如果你的mysql有大量的資料表,就需要花時間研究建立最優秀的索引或優化查詢語句。

1.3索引的分類

型別分類:

mysql目前主要有以下幾種索引型別:fulltexthashbtreertree

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高效獲取資料的資料結構 有序 在資料之外,資料庫系統還維護著某種特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。一般來說索引本身也很大,不可能全部儲存在...