在日常需求中,使用者使用手機號碼或信箱登入某一個系統,是一個很常見的操作,那如何在類似手機號碼或信箱這樣的欄位上建立一個合理的索引呢?
前綴索引,就是以一個欄位值的一部分作為索引。如果在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中文網其他相關文章!