位置: 编程技术 - 正文
推荐整理分享对MySQL子查询的简单改写优化(mysql子查询效率如何),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:mysql子查询的执行顺序,mysql子查询的表名,mysql 子查询,mysql子查询的表名3个单词,mysql子查询的特点,mysql子查询的缺点,mysql子查询的缺点,mysql子查询的缺点,内容如对您有帮助,希望把文章链接给更多的朋友!
使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有可能会让你大失所望,在我们的生产系统上就由于碰到了这个问题:
(备注:sql的业务逻辑可以打个比方:先查询出-号新卖出的本书,然后在查询这新卖出的本书在全年的销量情况)。
这条sql之所以出现的性能问题在于mysql优化器在处理子查询的弱点,mysql优化器在处理子查询的时候,会将将子查询改写。通常情况下,我们希望由内到外,先完成子查询的结果,然后在用子查询来驱动外查询的表,完成查询;但是mysql处理为将会先扫描外面表中的所有数据,每条数据将会传到子查询中与子查询关联,如果外表很大的话,那么性能上将会出现问题;
针对上面的查询,由于table_data这张表的数据有W的数据,同时子查询中的数据较多,有大量是重复的,这样就需要关联近W次,大量的关联导致这条sql执行了几个小时也没有执行完成,所以我们需要改写sql:
我们将子查询改为了关联,同时在子查询中加上distinct,减少t1关联t2的次数;
改造后,sql的执行时间降到ms以内。
分析MySQL中优化distinct的技巧 有这样的一个需求:selectcount(distinctnick)fromuser_access_xx_xx;这条sql用于统计用户访问的uv,由于单表的数据量在G以上,即使在user_access_xx_xx上加上nick的索
通过实例认识MySQL中前缀索引的用法 今天在测试环境中加一个索引时候发现一警告root@test::altertablearticledropindexind_article_url;QueryOK,rowsaffected(.sec)Records:Duplicates:0Warnings:0root@test
Suse Linux 中MySql安装与配置步骤 安装环境:操作系统:suseLinux数据库:MySQL5.0.希望能认识更多高手,互相学习讨论技术!首先发泄一下再这,网上看了N多安装mysql的文章,大多大同
标签: mysql子查询效率如何
本文链接地址:https://www.jiuchutong.com/biancheng/347328.html 转载请保留说明!上一篇:MySQL在关联复杂情况下所能做出的一些优化(mysql关联语句)
下一篇:分析MySQL中优化distinct的技巧(mysql常见优化手段)
友情链接: 武汉网站建设