mysql中合成索引的创建

合成索引的创建

一. 基础概念

合成索引可以用来提高对大文本字段(BOLB或TEXT)的查询性能,其实合成索引就是根据大文本字段的内容建立一个散列值,并把这个值存储在一个新的列中,接下来就可以通过查询散列值找到相应的数据行了。
这种技术只适用于精确匹配。
可以通过MD5函数生成大文本字段的散列值,当然也可以通过SHA1或者CRC32函数,用搜索散列标志符的速度比直接查找TEXT或BOLB本身速度要快

二. 动手测试

① 建立测试表test

create table test(
id int not null,
context text,
md5_value varchar(50)
)

mysql中合成索引的创建_第1张图片
② 插入数据(向表中插入数据,其中md5_value用来存储context字段的散列值)

insert into test values(1,repeat('我是一个乖宝宝呢'15),md5(repeat('我是一个乖宝宝呢'15)));
插入成功
insert into test values(2,repeat('中世纪晚期的步兵逐渐被淘汰了',15),md5(repeat('中世纪晚期的步兵逐渐被淘汰了',15)));
插入成功
insert into test values(1,repeat('一名大学生玩起了摄影'15),md5(repeat('一名大学生玩起了摄影'15)));
插入成功

mysql中合成索引的创建_第2张图片

select * from test;

mysql中合成索引的创建_第3张图片

③ 通过查询散列值来查询context字段内容

select * from test where md5_value=md5(repeat('我是一个乖宝宝呢'15));

mysql中合成索引的创建_第4张图片

通过查询散列值或者直接查询TEXT文本的内容都可以达到查询目的,不过如果TEXT文本内容量太大,通过查询散列值速度上优于通过直接查询TEXT文本,这就是合成索引的建立方法与大致建立过程

三. 注意事项

① 合成索引只适用于精确匹配,如果要用到对TEXT文本内容的模糊搜素,需要使用前缀索引
② 建立散列值的方法不止一种,主要使用MD5函数
③ 大文本字段被执行了大量的删除操作后,会在数据表中留下大量的空洞,可以定期执行OPTIMIZE TABLE对该类表进行整理

你可能感兴趣的:(mysql)