Rover12421's Blog

The End.

SQL 优化简介

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

SQL 优化中,了解和使用 EXPLAIN( 执行计划 ) ,是非常重要的。 EXPLAIN 可以告诉你 SQL 语句在 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)

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

执行计划显示的列名称 列含义
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 性能是不可取的,最佳的索引策略要根据数据的特点并结合实际查询需求来制定。

本文来源:http://www.unix-center.net

Comments