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值,而用前缀。 这里有提到。