mysql 后缀索引,mysql序列和索引

mysql 后缀索引,mysql序列和索引,一文简单了解MySQL前缀索引

MySQL支持前缀索引,也就是说你可以定义一个字符串的一部分作为索引。下面这篇文章主要介绍MySQL前缀索引的相关信息,有需要的朋友可以参考一下。

当要索引的列字符很多时,索引会很大且很慢。

(为了节省索引空间和提高索引效率,可以只对列开头的部分字符串进行索引)

原则:

减少重复的索引值

比如现在有一个地区表。

areagdpcodechina Shanghai 100 aaaachina Dalian 200 bbbusanewyork 300 ccccchina Fuxin 400 DDC China Beijing 500 eee

发现很多领域都是从中国开始的。

如果将前面的1-5个字符用作前缀索引,将会有大量的索引值重复。

索引重复性越低,查询效率越高。

前缀索引测试

//创建一个测试表

创建表` x_test `(

` id int(11)unsigned NOT NULL AUTO _ INCREMENT,

` x_name` varchar(255)不为空,

` x_time` int(10)不为空,

主键(` id `)

)ENGINE=InnoDB AUTO _ INCREMENT=4145025默认字符集=utf8mb4

//添加200万条测试数据

INSERT INTO x_test(x_name,x _ time)SELECT CONCAT(rand()* 3300102,x_name),x _ time FROM x _ test WHERE id 30000

20万测试数据

查询一个没有任何索引的。

SELECT * FROM x_test,其中x _ name=查询时间:2.253秒

添加前缀索引(用第一个字符创建前缀索引)

alter table x _ test add index(x _ name(1))再次查询同一个sql语句。

SELECT * FROM x_test,其中x _ name=查询时间:3.291秒

当用第一个字符创建前缀索引时,似乎查询时间更长。

因为只有索引值的第一个字符太重读了。

20万条数据都是以数字开头的,所以平均下来,20万条数据都有相同的索引值。

重新建立前缀索引。这一次,通过前4个字符创建它。

alter table x_test添加索引(x _ name(4));再次查询相同的sql语句

SELECT * FROM x_test,其中x _ name=查询时间:0.703秒

之前的4位索引创建大大降低了索引值的重复查询速度,从3秒降低到0.7秒。

20万条数据全部以数字开头,0-9的7位可以排列组合达到千万种组合。

也就是说,如果前面的7位用于索引,则不会有重复的索引值。

alter table x_test添加索引(x _ name(7));再次查询相同的sql语句

SELECT * FROM x_test,其中x _ name=查询时间:0.014秒(第一次无缓存状态)

补充:使用前缀索引的执行过程

从index2的索引树中,找到索引值为“丈”的记录,发现第一条是ID1;在主键索引树中找到行ID1,判断email的值是否满足where之后的条件,不满足则丢弃。回到index2的索引树查看下一条记录,发现还是丈,就把ID2拿出来,再回到ID2的索引树进行判断。如果值正确,结果将返回到结果集。重复上述过程,直到从index2索引树中检索到的数据不是“丈”,循环结束。

从上面的执行过程分析,可以知道前缀索引会导致扫描更多的行,这和你指定的前缀长度有关。可能email(7)的区分度比email(6)高,那么多行就不扫描了。

也就是说,通过使用前缀索引并定义长度,可以在不增加太多查询成本的情况下节省空间。

如何定义前缀索引的长度?

其实在建立指数的时候,关注的是区分度。区分度越高,越能体现指数的价值和优势。所以我们可以通过统计索引中不同的值来判断前缀要用多长。

选择count(独特的电子邮件)作为来自用户的L;

MySQL 5.7参考手册-前缀索引

总结

关于MySQL前缀索引的这篇文章到此为止。关于MySQL前缀索引的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

mysql 后缀索引,mysql序列和索引