通过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、有利于后期的分库分表。
原文转载:http://www.shaoqun.com/a/476464.html
灰色清关:https://www.ikjzd.com/w/1409
美菜网:https://www.ikjzd.com/w/1874
郭璐:https://www.ikjzd.com/w/2296
京东发言:不会强制"996" ,但混日子的不是我兄弟:https://www.ikjzd.com/home/22151
继美国、欧洲站后,亚马逊Coupons向日本站第三方卖家开放!:https://www.ikjzd.com/home/2597
通过explain关键字可以模拟优化器执行sql查询,分析查询语句或表结构的性能瓶颈。通过explain我们可以知道:1、表的读取顺序2、数据读取操作的类型3、哪些索引可以使用以及实际被使用的索引4、表置键的引用5、每张表有多少行被优化器查询通过实际案例来解释explain的使用以及具体分析:使用的方式很简单,只需要在sql语句前面加上explain关键字,然后运行。1、具体的字段代表的含义这里就
亚马逊全球开店制造:https://www.ikjzd.com/w/204.html
mail.ru:https://www.ikjzd.com/w/2232
经济拼不过中国,印度高官竟甩锅民众:都是抗议活动惹的祸!:https://www.ikjzd.com/home/15788
好消息!2018双11菲律宾Lazada线上订单达5000多万份!:https://www.ikjzd.com/home/10712
重磅!亚马逊中东新站点开始招商,中东掘金时代开始!:https://www.ikjzd.com/home/2359