首頁  >  文章  >  資料庫  >  MySQL怎麼給字串加一個高效率索引

MySQL怎麼給字串加一個高效率索引

王林
王林轉載
2023-05-28 21:04:30936瀏覽

需求

在日常需求中,使用者使用手機號碼或信箱登入某一個系統,是一個很常見的操作,那如何在類似手機號碼或信箱這樣的欄位上建立一個合理的索引呢?

前綴索引

前綴索引,就是以一個欄位值的一部分作為索引。如果在MySQL中建立索引時不指定索引欄位的長度,則會使用整個字串來建立索引。

语句1:
alter table test add index idx(email);
语句2:
alter table test add index idx(email(8));

對於語句1,建立的索引中,會包含每筆記錄中的整個email字串值。

對於語句2,建立的索引中,儲存的是每筆記錄中email欄位的前8個位元組。

使用前綴索引的優勢很明顯,那就是索引佔用的空間會更小,整個索引樹會更緊湊,樹的高度相對更低。

但是對應的,索引的區分度會變低,可能導致索引掃描行數增加。

在我們建立索引時,索引的區分度是一個很重要的指標。區分度越高,重複的數值就越少,掃描的效率就越高。

合理規劃前綴索引的使用長度可以不僅節省空間,同時也避免需要額外掃描行數。具體使用多少的長度,建議根據我們的實際業務場景來判斷、測試。

倒序 前綴索引

倒序 前綴索引有一個經典的使用場景,就是對身分證號做索引。

假設我們現在要維護一個市縣所有人的身份信息,其中按身份證號查詢是一個高頻場景。

身分證號碼總共15位或18位,一般來說,同一個市縣的人身分證號前6位一般是相同的,如果直接對身分證號做全索引,那麼會比較浪費空間,導致效能下降。如果使用直接前綴索引,前6位的區分度非常低(甚至可以說沒有),因為大多數值的前6位都相同。

這時,使用倒序 前綴索引的好處就體現出來了。

我們先將身分證倒序存儲,或是冗餘一個倒序的身分證號字段,然後取前6位元做前綴索引。

身分證後6位的區分度已經基本上夠我們使用了,如果你還覺得查詢速度不夠,那取前8位也是沒問題的。

以上是MySQL怎麼給字串加一個高效率索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除