数据库性能调优技术系列--深入理解单表扫执计划 .pdf

数据库性能调优技术系列--深入理解单表扫执计划 .pdf

数据库性能调优技术 --深入理解单表执行计划 作者:杨万富 一、概述 这篇文章是数据库性能调优技术的第二篇。上一篇讲解的索引调优是数据库 性能调优技术的基础。这篇讲解的深入理解单表执行计划,是数据库性能调优的 有力工具。 查询语句可以有多种可选执行计划,如何选择效率最高的执行计划?达梦数 据库、oracle 数据库、sql server 数据库都是采用基于成本的查询优化,对备选执 行计划进行打分,选择大家最小的执行计划进行执行。这些内容,我会在后续的 几篇文章中进行详细的描述。在此之前,我们首先需要掌握如何理解数据库执行 计划。这篇文章讲解只涉及单表操作的执行计划。 达梦数据库、oracle 数据库、sql server 数据库都可以显示给定语句的执行计 划。我详细分析了这三个数据库的执行计划,三者之间并无本质区别。 所以本文的内容适合于这三个数据库。同样,也应该适合绝大多数其它的数 据库。 单表执行的深入理解,是了解多表执行计划的基础。达梦数据库显示的执行 计划时,显示的信息会多一些。 因此,这篇文章中我选择达梦数据库作为实例数据库来讲解执行计划的原 理。 读完本文后,应该能够读懂这三个数据库的单表执行计划。 二、深入理解数据库执行计划 达梦数据库的执行计划有两种显示方式:第一种为图形化的显示方式;第二 种为文本式的显示方式。这里采用第二种方式进行讲解。 理解执行计划,是迈向理解数据库性能调优的重要一步。从执行计划中,我 们可以看出数据库是如何执行查询语句,并根据执行计划判断出该查询语句的执 行是否高效,以及如何进行优化。 下面我们将通过一些例子来理解数据库执行计划。 1.没有索引的全表扫描过滤如何执行? 构造处执行场景: /hzhzhz 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]; INDET1), FULL_SCAN 该执行计划中出现的内容,在此做出解释: 1)CSEK (查找)类似于上文中描述的步骤1,方括号中的内容是执行该操作的 评估代价,本文不作分析。“INDET1)”说明使用了T1 表的聚集索引, “FULL_SCAN”表示对聚集索引INDET1)进行全扫描。 这里需要注意的是,达梦数据库中的表默认情况下是索引组织的。如果建表 时指定了cluster primary key,那么数据以该clsuter primary key 组织数据,否则 以rowid 组织数据。 2 )XFLT (过滤)类似于上文中描述的步骤2 ,“EXPR0 = 2”是过滤条件。 3 )RSET (结果集)类似于上文中

文档评论(0)

1亿VIP精品文档

相关文档