MySQL資料庫索引

2021-08-04 12:07:57 字數 3554 閱讀 6192

mysql資料庫索引

目錄:

1、myisam與innodb的區別:

2、索引的優缺點:

3、如何選用索引:

4、檢視索引:

5、雜湊索引:

6、b+樹:

7、索引分類:

1、myisam與innodb的區別:

(1)show engines;

圖1.1 截圖1

a)mysql資料表主要支援如圖所示的儲存引擎,分為「事務安全型」和「非事務安全型」,其中myisam屬於非事務安全型,innodb屬於事務安全型。

b)myisam的b+樹的葉子結點上的data,並不是資料本身,而是資料存放的位址。主索引和二級索引區別不大,只是主索引中的key一定是唯一的。這裡的索引都是非聚集索引。

myisam採用壓縮機制儲存索引。

c)innodb的資料檔案本身就是索引檔案,b+樹上的葉子結點上的data就是資料本身,key為主鍵,這是聚集索引。

(2)show table status;

mysql預設建立的資料表就是innodb。

圖1.2 截圖2

2、索引的優缺點:

(1)優點:加快檢索速度

(2)缺點:

a)索引往往以索引檔案的形式儲存在磁碟上,要佔據磁碟空間,因此索引在查詢過程中就要產生磁碟i/o消耗,所以評價乙個資料結構作為索引的優劣最重要的指標就是在查詢過程中磁碟i/o操作次數的漸進複雜度。索引的結構組織要儘量減少在查詢過程中磁碟i/o的訪問次數。

b)降低更新表的速度。如對表進行insert、update和delete時,不僅要儲存資料,還要儲存索引檔案。

3、如何選用索引:

(1)盡量為用來搜尋、分類或分組的資料列編制索引,不要為作為輸出顯示的資料列編制索引。

where col1 = col2等where字句中使用的主鍵列

order by中使用的列

group by中使用的列

join on在連線操作中使用的列

p_order > 50 and p_order < 100按範圍訪問的列

(2)綜合考慮各資料列的維度勢。

資料列的維度等於它所容納的非重複值的個數。資料列的維度越高,索引的使用效果就越好。

當查詢優化程式確定出某乙個數值在資料表的資料行中出現頻率超過30%時, 查詢優化程式通常會跳過索引,而進行全資料表掃瞄。

(3)對短小的值進行索引。

a)如果能使用char(20),就不要使用char(100),因為短小的值

①可以讓比較操作更快地完成,加快索引的處理效能;

②可以讓索引的「體積」更小,減少磁碟i/o活動;

③短小的鍵值意味著鍵快取裡的索引塊可以容納更多的鍵值,讓mysql可以在記憶體裡同時容納更多的鍵,而這將加大在不需要從磁碟讀取更多索引塊的前提下在記憶體裡找到鍵值的概率。

b)對innodb儲存引擎而言,因為它使用的是聚集索引,所以把主鍵盡量短小將更有好處。聚集索引(clustered index):把資料行和主鍵值集中儲存在一起的情況。其他的索引都是二級索引——它們儲存著主鍵值和二級索引值。先在二級索引裡找到乙個主鍵值,再通過它找到相應的資料行。這意味著主鍵值再每乙個二級索引裡都會重複出現,如果主鍵值比較長的話,就會導致每乙個二級索引都將需要占用更多的儲存空間。

該索引中鍵值的邏輯順序決定了表中相應行的物理順序。因為無法同時把資料行存放在兩個不同的地方,所以乙個表只能有乙個聚集索引。

聚集索引優點:①資料訪問更快,聚集索引將資料和引用儲存在同乙個b+樹中,因此從聚集索引中獲取資料往往比在非聚集索引中查詢更快。

(4)充分利用最左邊的字首。

當建立乙個n個資料列的復合索引時,實際上就建立了mysql能夠使用的n個索引。乙個復合索引在工作時就相當於n個索引,因為索引中最左邊的資料列集合能夠用於匹配資料行。

如資料列 username,user***,usertel作為復合索引,

則username,user***

username

索引都能夠搜尋上面三種資料列組合,但是mysql不能使用沒有包含最左邊字首的搜尋的索引。即按照user***來搜尋,則索引不能使用。

4、檢視索引:

show index from user;檢視user表中的索引

圖4.1 截圖3

non unique:索引不能包括重複值,則為0

key name:索引的名稱

seq_in_index:索引中的列序列號,從1開始

collation:列儲存在索引中的方式,a表示公升序,null表示無分類。

cardinality:索引中唯一值的數目估計值。

sub_part:列只是被部分地編入索引,則為被編入索引的字元的數目,如果整列被編入索引,則為null。

packed:指示關鍵字如何被壓縮,如果沒有被壓縮,則為null。

null:如果列包含null值,則為yes

indextype:索引方法,包括btree,fulltext,hash,rtree等等,注意btree在mysql文件裡實際上是把b+樹索引寫成了btree

5、雜湊索引:

(1)雜湊索引是採用一系列的雜湊演算法,把鍵值換算成新的雜湊值,檢索時不需要像b樹一樣從根節點到子節點逐級查詢,只需一次雜湊演算法即可立刻定位到相應的位置。處理衝突的方法為鏈位址法。

(2)雜湊索引不能用來範圍檢索。只能用於等值過濾。

(3)雜湊索引不支援多列聯合索引的最左匹配規則。

(4)雜湊索引不能利用索引進行排序。因為經過hash演算法處理之後的hash值的大小關係,並不能保證保證和hash運算前完全一致。

6、b+樹:

b+樹是應檔案系統所需提出的一種b樹的變型。

一棵m階b+樹:

(1)有n棵子樹的節點中含有n個關鍵字。

(2)所有的葉子結點中包含了全部關鍵字的資訊,及指向含這些關鍵字記錄的指標。且葉子結點本身依照關鍵字的大小自小而大順序鏈結。

(3)所有的非終端結點可以看成索引部分,結點中僅含其子樹(根結點)中的最大(或最小)關鍵字。

(4)在b+樹,不管查詢成功與否,每次查詢都是走了一條從根到葉子結點的路徑。

(5)樹中每個結點最多含有m棵子樹。

7、索引分類:

(1)普通索引:沒有任何限制

(2)主鍵索引:特殊的唯一索引,不允許有空值

(3)唯一索引:索引列的值必須唯一,但允許有空值

(4)組合索引:列值的組合必須唯一

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

mysql更新索引庫 Mysql資料庫索引增刪改查

一.索引的作用 一般的應用系統,讀寫比例在10 1左右,而且插入操作和一般的更新操作很少出現效能問題,遇到最多的,也是最容易出問題的,還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重。在資料量和訪問量不大的情況下,mysql訪問是非常快的,是否加索引對訪問影響不大。但是當資料量和訪問量劇增的...

資料庫 MySQL 索引

索引 index 是幫助mysql高效獲取資料的資料結構。可以得到索引的本質 索引是資料結構。可以理解為 排好序的快速查詢資料結構 在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是索引。...