怎么給字符串字段加索引?


先上結論:

方法有以下:

一、 使用前綴索引 

可以根據以下方法確定合適的前綴長度(前綴索引很可能會損失區分度,所以需要預先設定一個可以接受的損失比例,比如 5%)
select count(distinct left(email,4))as L4 from SUser;

優點:如果定義好長度,可以做到既節省空間,又不用額外增加太多的查詢成本

缺點:1.使用不了覆蓋索引(所以前綴索引如果要做復合索引最好放最右)

   2.可能會因為區分度掃描更多行

 

二、倒序存儲(特定場景下可以提高區分度)

 

三、使用hash字段(在表上再創建一個整數字段,來保存校驗碼)

 

二、三兩者做比較:

1. 從占用的額外空間來看,倒序存儲方式在主鍵索引上,不會消耗額外的存儲空間,而 hash 字段方法需要增加一個字段。

但是倒序存儲方式使用 4 個字節的前綴長度往往是不夠的,如果再長一點,這個消耗跟額外這個 hash 字段也差不多抵消。

【占用空間差不多】

 

2.在 CPU 消耗方面,倒序方式每次寫和讀的時候,都需要額外調用一次 reverse 函數,而 hash 字段的方式需要額外調用一次 crc32() 函數。如果只從這兩個函數的計算復雜度來看的話,reverse 函數額外消耗的 CPU 資源會更小些。

【CPU消耗 二比三稍小】

 

3.從查詢效率上看,使用 hash 字段方式的查詢性能相對更穩定一些。因為 crc32 算出來的值雖然有沖突的概率,但是概率非常小,可以認為每次查詢的平均掃描行數接近 1。而倒序存儲方式畢竟還是用的前綴索引的方式,也就是說還是會增加掃描行數。

【查詢效率上,三比二好】

 

傳送門:【付費課程】

https://time.geekbang.org/column/article/71492

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM