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