最近整一些见不得人的事情,每天都忙到很晚。悲剧。
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性能优化是一个综合性的过程,涉及到SQL查询优化、数据库结构优化以及MySQL服务器配置等多个方面。通过上述方法和技术的应用,可以显著提高MySQL的运行效率,降低资源消耗,最终实现更好的用户体验和服务质量。
#### 一、MySQL优化概述 MySQL作为一种广泛使用的开源关系型数据库管理系统,在数据处理方面表现优秀。然而,在高并发、大数据量的情况下,可能会遇到性能瓶颈。因此,进行MySQL性能优化是非常必要的。MySQL优化...
MySql数据库性能优化 MySql数据库性能优化是指通过调整和优化数据库的各种参数、结构和查询语句,提高数据库的运行速度和效率,减少资源占用和系统瓶颈。下面将详细介绍MySql数据库性能优化的相关知识点。 什么是...
MySQL自带的慢查询日志(slow query log)是进行优化的重要工具之一,它记录了执行时间超过预设阈值的SQL语句。默认情况下,当一个查询超过10秒时,MySQL会将该查询写入慢查询日志。要启用这个功能,你需要在MySQL的...
总结来说,MySQL性能优化是一个系统工程,涵盖查询优化、数据库结构优化和服务器配置优化等多个层面。通过掌握这些优化手段,我们可以有效减少系统瓶颈,提高数据库响应速度,从而提升整个应用的性能。在实际操作中...
MySQL 5.6 性能优化总结 MySQL 5.6 是一个高性能的关系型数据库管理系统,然而随着数据库...MySQL 5.6 性能优化是一个复杂的过程,需要考虑多个方面的因素。通过合理的优化方法,可以大大提高 MySQL 数据库的性能。
在本文中,我们将重点关注两个关键的工具:MySQL 的慢查询日志(Slow Query Log)及其分析工具 `mysqldumpslow`,以及 `EXPLAIN` 语句在查询优化中的应用。 首先,慢查询日志是MySQL提供的一种性能监控机制,用于...
- **DEPENDENT SUBQUERY**:子查询中的第一条 SELECT 语句,其结果依赖于外部查询。 - **DERIVED**:FROM 子句中的派生表查询。 - **table**:表示查询所涉及的表名。 - **type**:表示表的连接类型,不同的连接...
**慢查询日志**是MySQL提供的一种非常实用的功能,它能够帮助我们记录并分析那些执行时间较长的SQL语句,进而找出性能瓶颈并进行优化。开启慢查询日志的方式是在MySQL配置文件`my.cnf`或`my.ini`中进行配置。具体的...
### 基于Mysql数据库的SQL优化 #### 一、表结构设计原则与存储引擎选择 ##### 1.1 表结构设计原则 - **选择合适的数据类型**:尽量选择固定长度的数据类型,例如使用`INT`而非`VARCHAR`来存储数字型数据,这有助...
### MySQL实战性能优化 #### 一、什么是优化? 在MySQL中,优化是指通过合理地配置资源和调整系统参数,使得数据库能够更快地响应查询请求,同时尽可能减少资源消耗。优化的目标在于减少系统的瓶颈,降低资源占用...
MySQL 5.6性能优化是数据库管理中至关重要的一环,其目标在于提升系统运行效率,减少资源消耗,增强系统的响应速度。优化不仅涉及查询层面,还包括数据库结构的优化以及MySQL服务器本身的调整。以下将详细讨论这些...
MySQL性能优化是提升系统在高并发环境下运行效率的关键。在处理大量并发请求时,数据库的性能直接影响了应用程序的响应时间和整体用户体验。以下是对标题和描述中提到的知识点的详细解释: 1. **优化目标**: - **...
### MySQL 5.6 性能优化 #### 目标 - **理解优化的概念:** 首先明确什么是优化,即如何通过合理地分配资源和调整系统参数来提升MySQL的运行速度,同时减少资源消耗。 - **掌握查询优化方法:** 学习并运用各种...
MySQL 子查询是一种将 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用的技术。 MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性。 MySQL 子查询没有固定的语法,但可以根据子...
本文主要介绍MySQL 5.6版本的性能优化最佳实践,包括优化的定义、查询优化、数据库结构优化以及MySQL服务器优化的方法。 首先,优化是指通过合理安排资源和调整系统参数,使得MySQL运行更快、更加节省资源。其原则...
MySQL优化是数据库管理中至关重要的环节,它关系到系统性能和响应速度。下面将详细介绍MySQL自带的慢查询日志分析工具mysqldumpslow及其使用方法,以及如何使用EXPLAIN来分析SQL查询。 首先,MySQL的慢查询日志...
Eloquent Subquery Magic是Eloquent ORM的一个扩展,它增强了原生Eloquent的功能,尤其是对子查询的支持。这个扩展允许开发者在查询构建器中更灵活地使用子查询,从而实现复杂的数据筛选和分析。 1. 子查询基础 子...