索引
数据库优化是避不开的一个技术点,关于数据库的优化,在性能达不到要求的情况下,我大致给出以下几个方向:
sql,合理使用索引
数据库读写分离,减少IO压力,由于数据库对记录做了持久化并存储在磁盘上,对磁盘的I/O又是非常消耗性能的操作,因此读、写都在一个库中会大大增加I/O的压力
数据库
生成规则以及请求路由规则
数据库性能提升是至关重要的,本文暂时不分析索引原理,只是从实战的角度,总结一下索引的使用技巧,理论结合实践,印象会更深一些。
sql为:
使用普通索引与不使用普通索引的区别
查询,执行sql语句:
查询时间:
sql语句的执行情况:
加上普通索引:
加上索引之后,查询速度马上快了3倍以上。
sql对列s_name使用了索引,因此rows只查了1条记录,大大提升了查询效率。
把索引建立在有大量重复数据的字段上
把索引建立在有大量重复数据的字段上,并不能有效地提升sql效率,比如我的s_phone的取值为"00000000"~"99999999",此时对s_phone做查询,未加索引的时候:
查询时间是0.05秒,而给s_phone字段加了索引之后:
查询效率,反而更加缓慢。通过explain语句,发现此次sql通过索引查询了18000条rows,再去定位这18000多条数据,自然会慢一点。
查询的时候用到了索引,也未必能提升查询的效率,索引建立在重复数据量很少的字段上效果才明显,但是这也将导致索引的增大,不过大多数时候这并不是太大的问题。
索引与like
sql:
通配符只能在结尾,开头不可以有任何的通配符,比如:
索引与函数
MysqL函数也会导致索引失效,看一个例子:
这条sql语句非常好理解,查询s_name列中从左边开始截取9个字符后的字符串为"99999ssss"的记录,查看一下explain的结果:
函数将导致索引失效。