Wednesday, September 8, 2010

MySQL性能优化1 - 简介

简单的说, SQL 优化就是通过使用一些工具和方法,找到那些问题 SQL, 并对其执行计划进行分析和改进,从而改善和提高这些问题 SQL 的执行效率,使他们更快、更好的执行。

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]

下面的表格对执行计划中各列的含义做了简单的说明:












































执行计划显示的列名称列含义
IdSELECT 的查询序列号
select_typeSELECT 类型,可以是 SIMPLE 、 PRIMARY 、 UNION 、 SUBQUERY 等类型
table输出的行所引用的表
type联接类型。可以是 system 、 const 、 index 、 possible_keys 、 ref 等类型
keykey 列显示 MySQL 实际决定使用的索引
key_len列显示 MySQL 决定使用索引的长度
Ref显示使用哪个列或常数与 key 一起从表中选择行
rowsrows 列显示 MySQL 认为它执行查询时必须检查的行数
Extra执行情况的说明与描述


在这里只对执行计划的列含义做简单介绍,在 SQL 优化步骤一节中会对执行计划各列的含义做进一步解释说明。

通过在 select 语句前增加 EXPLAIN 关键字,你可以知道 MySQL 如何处理这个 select ,执行计划中会提供有关表如何连接、连接顺序、索引使用情况等信息。通过对这些信息的解读和分析,制定相应的优化策略,并应用它,从而获得想要的性能。

SQL 优化中,除了对执行计划的解读外,索引的使用对 SQL 优化也是非常重要的,合理的创建和使用索引,可以对 SQL 性能提升起到事半功倍的效果,但过度的依靠创建索引来提高 SQL 性能是不可取的,最佳的索引策略要根据数据的特点并结合实际查询需求来制定。

No comments:

Post a Comment