mysql唯一索引和普通索引的選擇

2021-09-11 10:47:37 字數 887 閱讀 7945

結論:如果業務能夠保證唯一性應該盡量選擇普通索引而不是唯一索引

從查詢和更新兩方面說明:

查詢:查詢來說二者的區別是

普通索引查到符合條件的項後會繼續查詢下一項,如果下一項不符合再返回

唯一索引則是查到符合條件的項後就直接返回

其實這兩種方式效率幾乎沒有差別,因為查詢都是先讀取資料項然後在記憶體中進行的所以多讀取一次並不會帶來很大的影響

更新:對於更新操作二者還是有很大區別的,要理解他們之間的區別首先要理解change buffer

change buffer是用來記錄更新操作的一種行為,在沒有把資料項從硬碟讀取到記憶體中時,進行更新操作會先將操作記錄的change buffer中

在下一次進行select的時候在把資料項讀取到記憶體中時,會對資料項執行change buffer中的命令,這個過程也成為merge

所以唯一索引的更新操作往往是這樣,首先判斷要插入的項在資料庫中存不存在,這裡就涉及到了乙個讀的問題,往往這個時候就會把資料從硬碟讀取到記憶體中,如果這個時候還使用change buffer的意義並不大

因為change buffer存在的意義就是減少磁碟於記憶體的io,現在資料項已經在記憶體中了,可以直接修改,所以唯一索引是不適用change buffer的

普通索引的更新操作

普通索引往往是將操作記錄到change buffer中,在下一次讀取的時候執行這些操作,可以顯著減少磁碟與記憶體的io操作,從而提高效率

選擇:如果是讀取遠大於更新和插入的表,唯一索引和普通索引都可以,但是如果業務需求相反,個人覺得應該使用普通索引,當然如果是那種更新完要求立即可見的需求,就是剛更新完就要再查詢的,這種情況下反而不推薦普通索引,因為這樣會頻繁的產生merge操作,起不到change buffer的作用,反而需要額外空間來維護change buffer就有點得不償失了

MySQL 普通索引 唯一索引和主索引

1 普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 wherecolumn 或排序條件 orderbycolumn 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的資料列 如乙個整數型別的資料列 來...

MySQL 普通索引 唯一索引和主索引

1.普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 where column 或排序條件 order by column 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的資料列 如乙個整數型別的資料...

MySQL 普通索引 唯一索引和主索引

1 普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 wherecolumn 或排序條件 orderbycolumn 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的資料列 如乙個整數型別的資料列 來...