欢迎投稿

今日深度:

数据库性能调优技术之深入理解单表执行计划(

数据库性能调优技术之深入理解单表执行计划(1)


第一篇:数据库性能调优技术

一、概述

查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数据库、Oracle数据库、SQL Server数据库都是采用基于成本的查询优化,对备选执行计划进行打分,选择大家最小的执行计划进行执行。这些内容,我会在后续的几篇文章中进行详细的描述。在此之前,我们首先需要掌握如何理解数据库执行计划。这篇文章讲解只涉及单表操作的执行计划。

达梦数据库、Oracle数据库、SQL Server数据库都可以显示给定语句的执行计划。我详细分析了这三个数据库的执行计划,三者之间并无本质区别。

所以本文的内容适合于这三个数据库。同样,也应该适合绝大多数其它的数据库。

单表执行的深入理解,是了解多表执行计划的基础。达梦数据库显示的执行计划时,显示的信息会多一些。

因此,这篇文章中我选择达梦数据库作为实例数据库来讲解执行计划的原理。

读完本文后,应该能够读懂这三个数据库的单表执行计划。

二、深入理解数据库执行计划

达梦数据库的执行计划有两种显示方式:第一种为图形化的显示方式;第二种为文本式的显示方式。这里采用第二种方式进行讲解。

理解执行计划,是迈向理解数据库性能调优的重要一步。从执行计划中,我们可以看出数据库是如何执行查询语句,并根据执行计划判断出该查询语句的执行是否高效,以及如何进行优化。

下面我们将通过一些例子来理解数据库执行计划。

1、没有索引的全表扫描过滤如何执行?

构造处执行场景:

create table t1(c1 int,c2 int);
insert into t1 values(1,1);
insert into t1 values(2,2);
insert into t1 values(3,3);
insert into t1 values(4,4);
insert into t1 values(5,5);
insert into t1 values(6,6);

查询语句为:

select * from t1 where c1=2;

该语句的执行过程,如果用语言描述可以描述成这样:

1)如果是第一次执行该步骤,则取得表的第一条记录;否则取得当前记录的下一条记录。如果记录已经扫描结束,则执行步骤4,否则执行步骤2。
2)判断该记录是否满足过滤条件c1=2,满足则执行步骤3,否则执行步骤1。
3)把该记录放到结果集中,执行步骤1。
4)将结果集返回给客户端。

实际上,数据库执行查询语句的过程也是类似的,下面是该查询语句的执行计划:

#RSET:[21, 1, 1];
#XFLT:[0, 0, 0]; EXPR0 = 2
#CSEK:[21, 1, 1]; INDEX33555545(T1), FULL_SCAN

该执行计划中出现的内容,在此做出解释:

1)CSEK查找)类似于上文中描述的步骤1,方括号中的内容是执行该操作的评估代价,本文不作分析。“INDEX33555545(T1)”说明使用了T1表的聚集索引,“FULL_SCAN”表示对聚集索引INDEX33555545(T1)进行全扫描。

这里需要注意的是,达梦数据库中的表默认情况下是索引组织的。如果建表时指定了cluster primary key,那么数据以该clsuter primary key组织数据,否则以rowid组织数据。

2)XFLT过滤)类似于上文中描述的步骤2,“EXPR0 = 2”是过滤条件。

3)RSET结果集)类似于上文中描述的步骤3,用来存放符合条件的记录集。

我们可以看出,数据库的执行过程和我们用语言描述的步骤是一致的。

该查询语句完整的执行流程如下:

1)CSEK取得第一条记录1,1)传给XFLT,将控制权传给XFLT。

2)XFLT发现该记录1,1)不符合条件,将控制权传给CSEK。

3)CSEK取得下一条记录2,2)传给XFLT,将控制权传给XFLT。

4)XFLT发现记录2,2)符合条件,将该记录传给RSET,将控制权传给RSET。

5)RSET将记录2,2)放入结果集,将控制权传给XFLT。

6)XFLT给控制权传给CSEK。

7)CSEK取得下一条3,3)传给XFLT,将控制权传给XFLT。

8)XFLT发现该记录3,3)不符合条件,将控制权传给CSEK。

9)CSEK取得下一条4,4)传给XFLT,将控制权传给XFLT。

10)XFLT发现该记录4,4)不符合条件,将控制权传给CSEK

11)CSEK取得下一条5,5)传给XFLT,将控制权传给XFLT。

12)XFLT发现该记录5,5)不符合条件,将控制权传给CSEK。

13)CSEK取得下一条6,6)传给XFLT,将控制权传给XFLT。

14)XFLT发现该记录6,6)不符合条件,将控制权传给CSEK。

15)CSEK发现描述操作已经结束,通知XFLT结束。将控制权传给XFLT。

16)XFLT得知查询操作结束,通知RSET结束。将控制权传给RSET。

17)RSET得知操作结束。

18)发送结果集包含记录2,2))给客户端。


www.htsjk.Com true http://www.htsjk.com/shujukukf/17278.html NewsArticle 数据库性能调优技术之深入理解单表执行计划(1) 第一篇: 数据库性能调优技术 一、概述 查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数据库、Oracle数据库、...
评论暂时关闭