前言
本文介紹字串的前綴索引優缺點,以及字串區分度不高情況下,可以考慮如何建立索引,
前綴索引
對于像SELECT * FROM t WHERE email = '[email protected]'的查詢陳述句,如果不對email列建立索引,那么將會進行全表掃描,
對字串建立索引,可以對整個字串建立索引,也可以只對前幾個字符建立索引,第二者就是所謂的前綴索引方式,
優點
節省存盤空間,如果字串長度比較長,需要對整個字串建立索引,那么索引樹占用的存盤空間時很大的,而如果只是對前一部分字符建立索引,那么可以很好的節省存盤空間,
缺點
1、可能會增加掃描行數,影響查詢性能,因為整個字串可能不相同,但是前綴可能是相同的,導致使用前綴索引時,需要更多的回表掃描行,
所以,建立前綴索引前需要找到區分度最高的前綴,可以通過SELECT COUNT(distinct email(n)) FROM t;計算前綴不同的行數,和表的總行數比較,得到區分度最高的前綴,
2、索引覆寫失效,比如SELECT id, email FROM t WHERE email = '[email protected]',可以使用覆寫索引,但因為索引樹只有字串部分資料,必須回表拿資料,即索引覆寫失效,
字串區分度不高時
對于只存在字串的等值查詢場景,且整個字串區分度不高的情況,可以考慮如何建立索引?
1、存盤逆序字串并建立索引,適用于原始字串前綴的區分度不高,但字串末尾區分度高的場景,查詢陳述句為SELECT * FROM t WHERE email = reverse([email protected]),
2、新建立一列,內容為原始字串的crc32哈希值,并對哈希值這列建立索引,適用于整個字串前后部磁區分度都不高的場景,查詢陳述句為SELECT * FROM t WHERE crc_col = crc32('[email protected]') and email = '[email protected]',因為可能發生哈希沖突,所以需要再比較下字串值,
注意,前綴索引目的在于節省存盤空間,但相應地也增加了開發轉換的復雜度和錯誤的風險,存盤資源足夠的情況下,建議優先考慮整個字串索引方式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/300136.html
標籤:MySQL
上一篇:mysql中文亂碼記錄
下一篇:mysql中文亂碼記錄
