mysql如何进行性能优化?

 通过explain关键字可以模拟优化器执行sql查询,分析查询语句或表结构的性能瓶颈。通过explain我们可以知道:

1、表的读取顺序

2、数据读取操作的类型

3、哪些索引可以使用以及实际被使用的索引

4、表置键的引用

5、每张表有多少行被优化器查询

通过实际案例来解释explain的使用以及具体分析:

 使用的方式很简单,只需要在sql语句前面加上explain关键字,然后运行。

1、具体的字段代表的含义这里就不在赘述,请参考博文 https://blog.csdn.net/why15732625998/article/details/80388236 

2、通过查询结果显示,三条语句都达到了ref级别,说明语句基本达标。但在Extra中显示表a中显示了Using temporary和Using filesort,这个就不nice了。

  distinct的使用产生了Using temporary,但这个去重操作又是不可避免的;order by的使用产生了Using filesort,Using filesort表示在索引之外需要额外进行外部的排序动作,一般可以通过合适的索引来减少或者避免。参考博文 https://www.cnblogs.com/jikuanhao/p/11147391.html 

3、语句中我注释了查询条件b.is_del=0,是因为该列中存在null值,而null会使索引失效。

4、如何查询表索引:show keys  from tablename 或 show index from tablename ,具体可见博文 https://blog.csdn.net/justry_deng/article/details/81458470

-------------------------我是分割线-----------------------------------------

一般不建议联表查询,很多高性能应用都会对关联查询进行分解,主要有如下优势:

1、将查询分解后,执行单个表查询可以减少锁的竞争。

2、一般高性能应用都会添加缓存机制,分解关联查询让缓存的效率更高(关联表时,若某个表发生变化,则整个缓存无法使用,但分表查询只对变化的表查询缓存有影响)。

3、在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展。

4、查询效率可能会有所提升,这要看具体的情况(单表in查询按主键或索引顺寻查询比随机关联查询效率高),其次我们知道mysql的单表查询效率比联表查询效率更高。

5、可以减少冗余查询。

6、有利于后期的分库分表。

原文地址:https://www.cnblogs.com/az4215/p/13703585.html