Mysql 長字符串索引


InnoDB單列索引長度不能超過767bytes,聯合索引還有一個限制是長度不能超過3072。

所以長字符串字段 用B+樹完整建立索引是不行的,而且空間占用也太大了。

 

對於長字符串,有兩種方法建立索引:

1.模擬哈希索引

   新建一列用於存儲該字符列的hash值(哈希函數不要使用SHA1(),MD5(),因為會產生很長的字符串,浪費空間,比較也慢,最好是返回整數的hash函數),在該列建立索引,查詢時必須在where子句中包含常量值,以避免hash沖突(

      例如:SELECT  id

                FROM urlT

                WHERE url_hash = hash('www.blog.csdn.net')

                AND url = 'www.blog.csdn.net')。

2.使用前綴索引

要考慮選擇足夠長的前綴以保證較高的選擇性,同時又不能太長(以便節約空間),最后還要考慮數據分布。

只對字符串的前幾個字符進行索引。

通過字符串的前幾個字符我們已經能大概排序字符串了,剩下不能排序的可以通過遍歷進行查找啊,

這樣只在B+樹中存儲字符串的前幾個字符的編碼,既節約空間,又減少了字符串的比較時間,還大概能解決排序的問題,

比方說我們在建表語句中只對name列的前10個字符進行索引可以這么寫:

CREATE TABLE person_info(
    name VARCHAR(100) NOT NULL,
    birthday DATE NOT NULL,
    phone_number CHAR(11) NOT NULL,
    country varchar(100) NOT NULL,
    KEY idx_name_age_birthday (name(10), birthday, phone_number)
);    

name(10)就表示在建立的B+樹索引中只保留記錄的前10個字符的編碼,

這種只索引字符串值的前綴的策略是我們非常鼓勵的,尤其是在字符串類型能存儲的字符比較多的時候。

 

摘自:

    mysql對於很長的字符列的索引方案    

    mysql中,字符串如何建立索引的


免責聲明!

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



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