最近整一些见不得人的事情,每天都忙到很晚。悲剧。
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
分享到:
相关推荐
MySQL 子查询(subquery)语法与用法实例.docx
【大厂面试题】MySQL执行计划及SQL优化 知识点标签:explain、sql优化、索引、sql性能问题 题目描述 MySQL执行计划及SQL优化 1.SQL语句表头运行一个explain时,执行后所显示的表头字段如下: id : select查询的...
14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器的安全含义 15. 存储引擎和表类型 15.1. MyISAM存储...
2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意...
14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器的安全含义 15. 存储引擎和表类型 15.1. MyISAM存储...
11.subquery.pdf 12.cursor.pdf 13.optimization.pdf 14.replication_1.pdf 14.troubleshooting.pdf 15.replication_2.pdf 16.replication_3.pdf 17.mysql_HA.pdf 18.mysql_HA_NDB.pdf 19.mysql_scale.pdf...
将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. ...
14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器的安全含义 15. 存储引擎和表类型 15.1. MyISAM存储...
2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix...
Laravel开发-eloquent-subquery-magic 提供使用许多子查询功能(如FromSubQuery或LeftJoinSubQuery)的雄辩扩展
7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT ...
14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储引擎和事务 14.7. 插入存储引擎 14.8. 拔出存储引擎 14.9. 插件式存储器的安全含义 15. 存储引擎和表类型 15.1. MyISAM存储...
如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序。explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列:1,id select识别符。这是select的查询...
2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意...
不同的SQL结构有时具有同样的操作(例如:= ANY (subquery) and IN (subquery)),Oracle会把他们映射到一个单一的语义结构。本文将讨论优化器如何评估优化如下的情况和表达式:常量 LIKE 操作符 IN 操作符 ANY和...
Apply a Like Filter through an IN Subquery Essbase BIEE
文章目录相关文章一. 前言二. `Explain` 用途三. `Explain`语法四. 执行效果4.1. 命令行4.2. 可视化工具–`HeidiSQL Portable 9.4`五. Explain 字段详解5.1. 一览全局字段5.2. Id字段5.2.1. id相同5.2.2. id不相同...
Mysql 中文版 方便的查询mysql命令~~~ 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 13.1.2. ALTER TABLE语法 13.1.3. CREATE DATABASE语法 13.1.4. CREATE INDEX语法 13.1.5. CREATE TABLE语法 13.1.6. DROP ...
本文实例分析了MySQL嵌套查询。分享给大家供大家参考,具体如下: MySQl从4.11版后已经完全支持嵌套查询了,那么下面举些简单的嵌套查询的例子吧(源程序来自MySQL User Manual): 1. SELECT语句的子查询 语法: ...