MySQL: 长文本字段上建索引的问题与解决方案

文本字段越长,在这个字段上建索引的代价就越高。

为了解决这个问题,可以为这个字段配一个hash字段,然后在这个hash字段上建索引。

如,

select * from log where url_hash= CRC32('http://bing.com?query=xxx&tp=xxx' ) 

crc32()返回的值一般比较短,比较合适; 如果用md5或sha1做hash, 返回的值也很长,那就失去意义了。

不过,像上面这样写可能存在hash collision问题,所以应该加个原字段上的搜索条件,确保搜出来的是自己想要的:

select * from log where url_hash= CRC32('http://bing.com?query=xxx&tp=xxx' )  and url = ''http://bing.com?query=xxx&tp=xxx'

另一种类似的方案是: 不用hash值,而用前缀。
这里有提到。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.