MySQL可以通过EXPLAIN或DESC来查看并分析SQL语句的执行情况,如下需要计算2006年所有公司的销售额,需要关联sales表和company表,并且对money字段做求和操作,相应SQL如下:
EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: s
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1000
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: c
type: ref
possible_keys: index_company_id
key: index_company_id
key_len: 5
ref: sakila.c.company_id
rows: 1
Extra: Using where; Using index
列的说明:
select_type:
表示SELECT的类型,常见的有下面几种
SIMPLE:
简单表,不使用连接或子查询的
PRIMARY:
主查询,即外层的查询
UNION:
UNION中的第二个或者后面的查询语句
SUBQUERY:
子查询中的第一个SELECT
table:
输出结果集的表
type:
表示表的连接类型,性能由好到差的连接类型为下面顺序
system:
表中只有一行,即常量表
const:
单表中最多有一个匹配行,如primary key或unique index
eq_ref:
对于前面的每一行,在此表中只查询一条记录,也就是多表连接中使用primary key或unique index
ref:
与eq_ref类似,区别在于不是使用primary key或unique index,而是使用普通索引
ref_or_null:
与ref类型,区别在于条件中包含对null的查询
index_merge:
索引合并优化
unique_subquery:
in的后面是一个查询主键字段的子查询
index_subquery:
与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询
range:
单表中的范围查询
index:
对于前面的每一行,都通过查询索引来得到数据
all:
对于前面的每一行,都通过扫描全表来得到数据
possible_keys:
查询时可能用到的索引
key:
查询时实际使用到的索引
key-len:
索引字段的长度
rows:
扫描行的数量
Extra:
执行情况的说明和描述
通过EXPLAIN的分析,确认在上面的例子中是对sales表的全表扫描导致效率不理想,通过对sales表创建索引:
CREATE INDEX index_sales_year ON sales(year);
创建索引后,再对该查询语句分析如下:
EXPLAIN SELECT SUM(money) FROM sales s,company c WHERE s.company_id=c.id AND s.year=2006 \G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: s
type: ref
possible_keys: index_seles_year
key: index_sales_year
key_len: 2
ref: const
rows: 1
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: c
type: ref
possible_keys: index_company_id
key: index_company_id
key_len: 5
ref: sakila.c.company_id
rows: 1
Extra: Using where; Using index
分享到:
相关推荐
3. 查询优化器:理解MySQL如何选择执行计划,使用`EXPLAIN`分析查询性能。 通过本教程的学习,你将全面掌握MySQL的进阶知识,能够熟练地进行数据库设计、查询优化、事务处理以及性能调优。在实际项目中,不断实践和...
- **DESC或EXPLAIN**: 用于分析SQL执行计划。 - **EXTENDED EXPLAIN**: 结合SHOW WARNINGS命令可以查看实际执行的SQL语句。 **2. 提高性能的特性** - **索引覆盖**: 若查询所需数据全部存在于索引中,无需回表...
### 性能加速器:MySQL 中索引的创建与优化 在数据库管理中,查询性能的提升是一个永恒的话题。为了实现高效的数据检索,索引作为一项关键技术被广泛应用。本文将深入探讨如何在 MySQL 中创建和管理索引,通过详细...
- `EXPLAIN`关键字分析SQL查询的执行计划,帮助优化查询效率。 - `SHOW STATUS;`显示服务器状态变量,监控性能。 - `SHOW VARIABLES;`查看系统变量,调整优化配置。 以上是MySQL命令使用的基础知识,实际应用中...
- `EXPLAIN`命令:分析查询计划,帮助识别性能瓶颈。 - 查询重写技巧:简化查询逻辑,减少不必要的子查询。 - **数据库维护**: - 备份与恢复:定期备份数据库,确保数据安全。 - 表优化:`OPTIMIZE TABLE table...
- `explain`或`desc`分析执行计划,理解查询如何使用索引。 - `show profile`分析SQL执行的各个阶段,找出耗时环节。 - MySQL 5.6及更高版本的`trace`功能,揭示优化器选择执行计划的原因。 - 定期分析和检查表...
1. **优化器选择的执行计划**:MySQL优化器可能会根据统计信息和成本估算选择不同的查询执行计划。在5.6.19版本中,优化器可能认为全表扫描比使用索引更划算,这可能是因为统计信息不准确或者优化器的策略有所改变。...
3. **查看查询性能**:分析 SQL 查询的执行计划。 ```sql EXPLAIN SELECT * FROM users WHERE username = 'john_doe'; ``` #### 十、安全和权限管理 1. **创建用户**:增加新的数据库用户。 ```sql CREATE ...
此外,还可以考虑其他优化策略,比如使用`EXPLAIN`分析查询计划,检查索引是否被有效利用,或者使用`INDEX` Hint指导优化器选择更优的索引。还可以考虑分批处理大数据,减少一次性返回的数据量,以及合理设计数据库...
在实际应用中,应结合EXPLAIN分析查询计划,找出可能导致性能瓶颈的部分,并针对性地进行优化。同时,监控数据库性能,了解SQL执行的实时情况,也有助于及时发现和解决问题。通过上述方法,我们可以逐步提升MySQL...
数据库SQL执行情况收集是数据库监控和性能优化的重要环节,对于MySQL和...在分析过程中,可以结合其他工具和指标,如Explain Plan(Oracle)、EXPLAIN(MySQL)等,来深入理解SQL执行的细节,以便做出有针对性的优化。
3. 分析器:解析SQL语句,确定其意图并检查语法。优化时应确保语句清晰无误,避免歧义。 4. 优化器:选择执行查询的最佳策略。优化器的选择可能影响查询效率,例如,决定使用哪个索引。 5. 执行器:执行查询并返回...
可以使用`EXPLAIN`来查看查询计划,检查是否有合适的索引以及是否可以优化查询结构。在本例中,可能需要为`t.fid`、`p.tid`和`p.author`字段创建索引来提高查询效率。 综上所述,通过对MySQL数据库的引擎转换、缓存...
2. 错误诊断:利用EXPLAIN分析查询执行计划,找出慢查询的原因,如不正确的索引、全表扫描等。 3. 数据恢复:当线上数据出错时,可能需要回滚到某个时间点的数据,或者通过备份恢复。 4. 日志分析:分析数据库日志,...
- **查询优化**:避免使用SELECT *,减少JOIN操作,使用EXPLAIN分析SQL执行计划。 - **表设计优化**:合理设计数据库表结构,减少冗余字段。 - **缓存机制**:使用如Redis等缓存技术来存储常用查询结果,减少数据库...
使用EXPLAIN分析查询计划。 - **表结构优化**:合理设计表结构,如使用合适的数据类型减少存储空间消耗。 - **分区技术**:对大数据表进行分区处理,提高查询效率。 - **缓存机制**:使用缓存策略减轻数据库压力,如...