`
ldd600
  • 浏览: 104250 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
47bb354f-8b5f-3ea6-a206-c7ead38c741c
Hyperic插件开发不完...
浏览量:11305
社区版块
存档分类
最新评论

MySQL,一条两层subquery的坑爹优化

 
阅读更多

最近整一些见不得人的事情,每天都忙到很晚。悲剧。

 

 

 

SELECT a.client_id,
       s.cnt s_cnt,
       a.cnt a_cnt,
       s.cnt / a.cnt s_rate
FROM (SELECT COUNT(*) cnt,
             handle_client client_id
      FROM tb_captcha cpout
      WHERE expire_time > curdate ()
      GROUP BY handle_client) a 
     LEFT JOIN (SELECT COUNT(*),
       handle_client
FROM tb_captcha
WHERE id IN (SELECT MAX(id)
             FROM tb_captcha
             WHERE task_id IN (SELECT task_id
                               FROM tb_client_task_log
                               WHERE task_code IN ('registerRobotUserEmail','registerWeibo')
                               AND   status = 0
                               AND   executed_time > '2011-03')
             GROUP BY task_id,
                      seq)
GROUP BY handle_client;) s ON a.client_id = s.client_id
ORDER BY s.cnt DESC;

 

同事写了个子查询,跑到mysql上乖乖停不下来,最后被我kill掉了。

 

哥来优化一下。

 

先建索引

在tb_captcha建索引(expire_time, handle_client), (task_id)

在tb_client_log上建索引(status, execuited_time)

 

subquery很坑爹当成exists跑。都是all scan。



查询后的的数据量太大,type为all

 

怎么改呢。

1.如果临时表不是很大,用临时表ok

2.用join代替子查询

 

用inner join优化最里面的子查询。


可以看到里层已经将unique_dependency+all 优化成ref+range。测试性能有所提高,但是没有达到数量级的提高。大概提高了4,5倍。外面那个子查询还会将整个查询死掉。外面有个index type。

 

外部子查询用临时表优化

 


因为临时表都会比较小,所以这种方式对性能有很大的提高。

原来结果根本出不来。现在的执行时间是:

 


执行时间是10ms。

 

 

呵呵。应该算成功优化了。

 

再加上left join。

 


10ms。ok。

  • 大小: 113 KB
  • 大小: 111.5 KB
  • 大小: 44.1 KB
  • 大小: 76.9 KB
  • 大小: 96.6 KB
0
0
分享到:
评论

相关推荐

    mysql性能的优化

    MySQL性能优化是一个综合性的过程,涉及到SQL查询优化、数据库结构优化以及MySQL服务器配置等多个方面。通过上述方法和技术的应用,可以显著提高MySQL的运行效率,降低资源消耗,最终实现更好的用户体验和服务质量。

    MySql性能优化集合--满满的干货

    #### 一、MySQL优化概述 MySQL作为一种广泛使用的开源关系型数据库管理系统,在数据处理方面表现优秀。然而,在高并发、大数据量的情况下,可能会遇到性能瓶颈。因此,进行MySQL性能优化是非常必要的。MySQL优化...

    MySql数据库性能优化

    MySql数据库性能优化 MySql数据库性能优化是指通过调整和优化数据库的各种参数、结构和查询语句,提高数据库的运行速度和效率,减少资源占用和系统瓶颈。下面将详细介绍MySql数据库性能优化的相关知识点。 什么是...

    MySql优化.pdf

    MySQL自带的慢查询日志(slow query log)是进行优化的重要工具之一,它记录了执行时间超过预设阈值的SQL语句。默认情况下,当一个查询超过10秒时,MySQL会将该查询写入慢查询日志。要启用这个功能,你需要在MySQL的...

    高并发基础之-MySql性能优化.pdf

    总结来说,MySQL性能优化是一个系统工程,涵盖查询优化、数据库结构优化和服务器配置优化等多个层面。通过掌握这些优化手段,我们可以有效减少系统瓶颈,提高数据库响应速度,从而提升整个应用的性能。在实际操作中...

    mysql5.6性能优化总结

    MySQL 5.6 性能优化总结 MySQL 5.6 是一个高性能的关系型数据库管理系统,然而随着数据库...MySQL 5.6 性能优化是一个复杂的过程,需要考虑多个方面的因素。通过合理的优化方法,可以大大提高 MySQL 数据库的性能。

    MySql 优化.doc

    在本文中,我们将重点关注两个关键的工具:MySQL 的慢查询日志(Slow Query Log)及其分析工具 `mysqldumpslow`,以及 `EXPLAIN` 语句在查询优化中的应用。 首先,慢查询日志是MySQL提供的一种性能监控机制,用于...

    MySql5.6性能优化.docx

    - **DEPENDENT SUBQUERY**:子查询中的第一条 SELECT 语句,其结果依赖于外部查询。 - **DERIVED**:FROM 子句中的派生表查询。 - **table**:表示查询所涉及的表名。 - **type**:表示表的连接类型,不同的连接...

    Mysql 优化技巧总结(自己整理)

    **慢查询日志**是MySQL提供的一种非常实用的功能,它能够帮助我们记录并分析那些执行时间较长的SQL语句,进而找出性能瓶颈并进行优化。开启慢查询日志的方式是在MySQL配置文件`my.cnf`或`my.ini`中进行配置。具体的...

    基于Mysql数据库的SQL优化

    ### 基于Mysql数据库的SQL优化 #### 一、表结构设计原则与存储引擎选择 ##### 1.1 表结构设计原则 - **选择合适的数据类型**:尽量选择固定长度的数据类型,例如使用`INT`而非`VARCHAR`来存储数字型数据,这有助...

    mysql实战性能优化

    ### MySQL实战性能优化 #### 一、什么是优化? 在MySQL中,优化是指通过合理地配置资源和调整系统参数,使得数据库能够更快地响应查询请求,同时尽可能减少资源消耗。优化的目标在于减少系统的瓶颈,降低资源占用...

    MySql5.6性能优化1

    MySQL 5.6性能优化是数据库管理中至关重要的一环,其目标在于提升系统运行效率,减少资源消耗,增强系统的响应速度。优化不仅涉及查询层面,还包括数据库结构的优化以及MySQL服务器本身的调整。以下将详细讨论这些...

    MySql高并发基础之性能优化

    MySQL性能优化是提升系统在高并发环境下运行效率的关键。在处理大量并发请求时,数据库的性能直接影响了应用程序的响应时间和整体用户体验。以下是对标题和描述中提到的知识点的详细解释: 1. **优化目标**: - **...

    Mysql5.6性能优化

    ### MySQL 5.6 性能优化 #### 目标 - **理解优化的概念:** 首先明确什么是优化,即如何通过合理地分配资源和调整系统参数来提升MySQL的运行速度,同时减少资源消耗。 - **掌握查询优化方法:** 学习并运用各种...

    MySQL 子查询(subquery)语法与用法实例.docx

    MySQL 子查询是一种将 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用的技术。 MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性。 MySQL 子查询没有固定的语法,但可以根据子...

    MySql5.6性能优化最佳实践笔记 PDF版

    本文主要介绍MySQL 5.6版本的性能优化最佳实践,包括优化的定义、查询优化、数据库结构优化以及MySQL服务器优化的方法。 首先,优化是指通过合理安排资源和调整系统参数,使得MySQL运行更快、更加节省资源。其原则...

    MySql优化 自已总结

    MySQL优化是数据库管理中至关重要的环节,它关系到系统性能和响应速度。下面将详细介绍MySQL自带的慢查询日志分析工具mysqldumpslow及其使用方法,以及如何使用EXPLAIN来分析SQL查询。 首先,MySQL的慢查询日志...

    Laravel开发-eloquent-subquery-magic

    Eloquent Subquery Magic是Eloquent ORM的一个扩展,它增强了原生Eloquent的功能,尤其是对子查询的支持。这个扩展允许开发者在查询构建器中更灵活地使用子查询,从而实现复杂的数据筛选和分析。 1. 子查询基础 子...

Global site tag (gtag.js) - Google Analytics