MYSQL优化

一 使用Explain分析SQL的执行计划,找出低效SQL进行优化。


二 使用索引 ,优化查询。
MySql的索引可以对索引字段值为null的情况使用索引,这点与ORACLE不同。
有些情况,索引不会被应用:
1 联合索引必须出现最左边字段,否则不会使用索引;
2 使用like查询时候,左边不能出现%,否则不会使用索引;
3 出现否定条件 <>  !<   !> not in  not like 等不使用索引;
4 or前面字段使用索引后面没用,则不会使用索引。


三 优化SQL语句
1 对于order by 语句,尽量减少额外的排序。尽量让order by 与 where 使用相同的索引,并且order by 字段的顺序,与索引顺序一致,且同时升序或降序;
2 group by 会隐形执行一个order by 语句,可以用 order by null 禁用。
3 使用联合查询代替子查询,不会生成临时表,效率较高;
4 where 过滤性强的语句放前面。
5 能在主表过滤的尽量在主表过滤,减少和附表关联的数据量,可以提升查询效率。
四 使用表分区,提升性能
表分区可以提高数据处理的并行能力。
1 把一个大表分成多个小表可以存储更多的数据;
2 分区键作为查询条件,会进入指定分区查询,提高查询效率;
3 聚合函数可以在各个分区上并行执行,提高聚合的效率;
4 删除一个分区的效率比在表中删除这些数据效率高的多。


五 在应用端优化
1 使用数据库连接池,频繁创建断开连接开销较大,可以使用数据库连接池提升性能;
2 减少数据库的访问次数,能用一次查询的就不做二次查询;
3 开启数据库查询缓存,开启后会对select结果集缓存,再有相同的查询时候,直接在缓存中查找,不在解析执行SQL。表结构和表数据更改时候,缓存会被清空;
4 增加CACHE层,可以把数据库中访问频繁不大更新的数据抽取出来,放到应用端文本文件里,在查询时候在文本中读取,效率较高;
5 使用负载均衡的架构。可以使用主从复制实现负载均衡,主库更新从库查询,读写分离提升性能;也可以使用集群实现负载均衡,SQL节点越多,单个SQL节点的负载越小,系统性能越好。

你可能感兴趣的:(mysql)