mysql下普通索引和唯一索引的效率對比
今天在我的虛擬機(jī)中布置了環(huán)境,測試抓圖如下:

抓的這幾個都是第一次執(zhí)行的,刷了幾次后,取平均值,效率大致相同,而且如果在一個列上同時建唯一索引和普通索引的話,mysql會自動選擇唯一索引。
谷歌一下:
唯一索引和普通索引使用的結(jié)構(gòu)都是B-tree,執(zhí)行時間復(fù)雜度都是O(log n)。
補(bǔ)充下概念:
1、普通索引
普通索引(由關(guān)鍵字KEY或INDEX定義的索引)的唯一任務(wù)是加快對數(shù)據(jù)的訪問速度。因此,應(yīng)該只為那些最經(jīng)常出現(xiàn)在查詢條件(WHEREcolumn=)或排序條件(ORDERBYcolumn)中的數(shù)據(jù)列創(chuàng)建索引。只要有可能,就應(yīng)該選擇一個數(shù)據(jù)最整齊、最緊湊的數(shù)據(jù)列(如一個整數(shù)類型的數(shù)據(jù)列)來創(chuàng)建索引。
2、唯一索引
普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。比如說,因為人有可能同名,所以同一個姓名在同一個“員工個人資料”數(shù)據(jù)表里可能出現(xiàn)兩次或更多次。
如果能確定某個數(shù)據(jù)列將只包含彼此各不相同的值,在為這個數(shù)據(jù)列創(chuàng)建索引的時候就應(yīng)該用關(guān)鍵字UNIQUE把它定義為一個唯一索引。這么做的好處:一是簡化了MySQL對這個索引的管理工作,這個索引也因此而變得更有效率;二是MySQL會在有新記錄插入數(shù)據(jù)表時,自動檢查新記錄的這個字段的值是否已經(jīng)在某個記錄的這個字段里出現(xiàn)過了;如果是,MySQL將拒絕插入那條新記錄。也就是說,唯一索引可以保證數(shù)據(jù)記錄的唯一性。事實上,在許多場合,人們創(chuàng)建唯一索引的目的往往不是為了提高訪問速度,而只是為了避免數(shù)據(jù)出現(xiàn)重復(fù)。
注:
終于找到同事說執(zhí)行效率不一樣的原因了,他在普通索引上創(chuàng)建的是前綴索引,只取了前16個字節(jié),而唯一索引使用的全字節(jié) :)
相關(guān)文章
MySQL中查詢當(dāng)前時間間隔前1天的數(shù)據(jù)
實際項目中我們都會遇到分布式定時任務(wù)執(zhí)行的情況,今天通過本文給大家分享MySQL中查詢當(dāng)前時間間隔前1天的數(shù)據(jù),查詢sql語句給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧<BR>2021-12-12
Idea 如何導(dǎo)入Mysql8.0驅(qū)動jar包
IDEA中的庫(Libraries)就是用來存放外部jar包,我們的項目或模塊需要某些jar包時,可以從這里把包導(dǎo)入到模塊依賴(Dependencies)中,本文給大家介紹Idea 如何導(dǎo)入Mysql8.0驅(qū)動jar包,感興趣的朋友一起看看吧2023-12-12
mysql?count()函數(shù)不計算null和空值問題
這篇文章主要介紹了mysql?count()函數(shù)不計算null和空值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
MySQL錯誤代碼:1052?Column?'xxx'?in?field?list?is
今天在工作中寫sql語句時遇到了個sql錯誤,為記錄并不再重復(fù)出錯,下面這篇文章主要給大家介紹了關(guān)于MySQL錯誤代碼:1052?Column?'xxx'?in?field?list?is?ambiguous的原因和解決方法,需要的朋友可以參考下2023-04-04

