SQL 优化中,了解和使用 EXPLAIN( 执行计划 ) ,是非常重要的。 EXPLAIN 可以告诉你 SQL 语句在 MySQL 中是如何执行的。
[cc lang="mysql"]
explain select sum(profit) from sales a,company b where a.company_id = b.id and a.year = 2006\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ref
possible_keys: idx_sales_year,idx_sales_commpay_id
key: idx_sales_year
key_len: 4
ref: const
rows: 3
Extra:
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: b
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 12
Extra: Using where
2 rows in set (0.00 sec)
[/cc]
下面的表格对执行计划中各列的含义做了简单的说明:
执行计划显示的列名称 | 列含义 |
Id | SELECT 的查询序列号 |
select_type | SELECT 类型,可以是 SIMPLE 、 PRIMARY 、 UNION 、 SUBQUERY 等类型 |
table | 输出的行所引用的表 |
type | 联接类型。可以是 system 、 const 、 index 、 possible_keys 、 ref 等类型 |
key | key 列显示 MySQL 实际决定使用的索引 |
key_len | 列显示 MySQL 决定使用索引的长度 |
Ref | 显示使用哪个列或常数与 key 一起从表中选择行 |
rows | rows 列显示 MySQL 认为它执行查询时必须检查的行数 |
Extra | 执行情况的说明与描述 |
在这里只对执行计划的列含义做简单介绍,在 SQL 优化步骤一节中会对执行计划各列的含义做进一步解释说明。
通过在 select 语句前增加 EXPLAIN 关键字,你可以知道 MySQL 如何处理这个 select ,执行计划中会提供有关表如何连接、连接顺序、索引使用情况等信息。通过对这些信息的解读和分析,制定相应的优化策略,并应用它,从而获得想要的性能。
SQL 优化中,除了对执行计划的解读外,索引的使用对 SQL 优化也是非常重要的,合理的创建和使用索引,可以对 SQL 性能提升起到事半功倍的效果,但过度的依靠创建索引来提高 SQL 性能是不可取的,最佳的索引策略要根据数据的特点并结合实际查询需求来制定。
No comments:
Post a Comment