MySQL5.7中如何进行优化unionall

MySQL5.7中如何进行优化union all,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

站在用户的角度思考问题,与客户深入沟通,找到公主岭网站设计与公主岭网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都网站制作、企业官网、英文网站、手机端网站、网站推广、主机域名雅安服务器托管、企业邮箱。业务覆盖公主岭地区。

 MySQL5.6中,使用union all相当于创建一张临时表,这在执行大的联合查询时候会增加I/O开销,降低查询速度。
 例如执行以下SQL语句:
 (select id from accessLog order by id) union all (select id from access_test order by id);
 在MySQL5.6环境:

点击(此处)折叠或打开

mysql> select version();

| version() |

| 5.6.14-log |

1 row in set (0.00 sec)

mysql> explain (select id from accessLog order by id) union all (select id from access_test order by id);

 id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

| 1 | PRIMARY | accessLog | index | NULL | loginuserId | 9 | NULL | 535513 | Using index |

| 2 | UNION | access_test | index | NULL | idx_loginuid | 9 | NULL | 477248 | Using index |

| NULL | UNION RESULT | <union1,2> | ALL | NULL | NULL | NULL | NULL | NULL | Using temporary |

 可以看到执行计划中提现到了创建的临时表。
 在MySQL5.7环境:
点击(此处)折叠或打开

mysql> select version();

| version() |

| 5.7.18-log |

1 row in set (0.00 sec)

mysql> explain (select id from accessLog order by id) union all (select id from access_test order by id);

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

| 1 | PRIMARY | accessLog | NULL | index | NULL | loginuserId | 9 | NULL | 586090 | 100.00 | Using index |

| 2 | UNION | access_test | NULL | ALL | NULL | NULL | NULL | NULL | 571023 | 100.00 | NULL |

  整个查询过程没有创建临时表,按照顺序,accessLog表的查询结果首先传输到客户端,然后access_test表的查询结果再传输到客户端。
 注意:此项优化对union和在最外层用order by无效,如下:
点击(此处)折叠或打开

mysql> select version();

| version() |

| 5.7.18-log |

1 row in set (0.00 sec)

mysql> explain (select id from accessLog order by id) union all (select id from access_test order by id) order by id;

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

| 1 | PRIMARY | accessLog | NULL | index | NULL | loginuserId | 9 | NULL | 586090 | 100.00 | Using index |

| 2 | UNION | access_test | NULL | ALL | NULL | NULL | NULL | NULL | 571023 | 100.00 | NULL |

| NULL | UNION RESULT | <union1,2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | NULL | Using temporary; Using filesort |

看完上述内容,你们掌握MySQL5.7中如何进行优化union all的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!

网站名称:MySQL5.7中如何进行优化unionall
本文地址:https://www.cdcxhl.com/article34/ghdepe.html

成都网站建设公司_创新互联,为您提供虚拟主机电子商务品牌网站建设网站排名面包屑导航定制网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

商城网站建设