MySQL9:索引实战

前端之家收集整理的这篇文章主要介绍了MySQL9:索引实战前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

索引

数据库优化是避不开的一个技术点,关于数据库的优化,在性能达不到要求的情况下,我大致给出以下几个方向:

sql,合理使用索引

数据库读写分离,减少IO压力,由于数据库对记录做了持久化并存储在磁盘上,对磁盘的I/O又是非常消耗性能的操作,因此读、写都在一个库中会大大增加I/O的压力

数据库

生成规则以及请求路由规则

数据库性能提升是至关重要的,本文暂时不分析索引原理,只是从实战的角度,总结一下索引的使用技巧,理论结合实践,印象会更深一些。

sql为:

() () () () InnoDB,CHARSETutf8;

使用普通索引与不使用普通索引的区别

查询,执行sql语句:

student s_name

查询时间:

sql语句的执行情况:

  • 查询,没有join,没有union,没有中间表
  • sql进行了全表查询
  • MysqL使用的索引名,这里null表示此次SQL查询MysqL并没有使用索引
  • SQL查询了100665条记录

加上普通索引:

student

加上索引之后,查询速度马上快了3倍以上。

sql对列s_name使用了索引,因此rows只查了1条记录,大大提升了查询效率。

把索引建立在有大量重复数据的字段上

把索引建立在有大量重复数据的字段上,并不能有效地提升sql效率,比如我的s_phone的取值为"00000000"~"99999999",此时对s_phone做查询,未加索引的时候:

查询时间是0.05秒,而给s_phone字段加了索引之后:

查询效率,反而更加缓慢。通过explain语句,发现此次sql通过索引查询了18000条rows,再去定位这18000多条数据,自然会慢一点。

查询的时候用到了索引,也未必能提升查询的效率,索引建立在重复数据量很少的字段上效果才明显,但是这也将导致索引的增大,不过大多数时候这并不是太大的问题。

索引与like

sql:

student s_name "99999ssss student s_name "99999ssss";

通配符只能在结尾,开头不可以有任何的通配符,比如:

student s_name "99999ssss

索引与函数

MysqL函数也会导致索引失效,看一个例子:

student "99999ssss" (s_name,

这条sql语句非常好理解,查询s_name列中从左边开始截取9个字符后的字符串为"99999ssss"的记录,查看一下explain的结果:

函数将导致索引失效。

依然使用=,但是索引列不使用函数而对常数项使用函数,这样索引就有效了,当然这条语句是无法这么优化的。

猜你在找的MySQL相关文章