文档介绍:数据库性能调优技术——深入理解单表执行计划
一、概述
这篇文章是数据库性能调优技术的第二篇。上一篇讲解的索引调优是数据库性能调优技术的基础。这篇讲解的深入理解单表执行计划,是数据库性能调优的有力工具。
查询语句可以有多种条件,将控制权传给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))给客户端。
,如何执行呢?
表t1的定义以及数据和1中描述的一样。
创建索引:
create index it1c1 on t1(c1);
查询语句“select * from t1 where c1=2;”对应的执行计划为:
#RSET:[201, 2, 1];
#CSEK(SECOND):[201, 2, 1]; IT1C1(T1), INDEX_EQU_SEARCH
CSEK行的“SECOND”表示使用非聚集索引“IT1C1”,对该索引进行索引等值(INDEX_EQU_SEARCH)查找。
该执行计划的执行流程为:
1)CSEK使用c1=2查找非聚集索引,得到第一条c1=2的索引记录(2,rowid1)中的rowid1(为数值)。使用rowid1查找聚集索引得到对应的数据记录(2,2)传递给RSET,将控制权传给RSET。
2)RSET将记录(2,2)放入结果集,将控制权传给CSEK。(因为c1上的索引是非唯一的,所以可能出现两条以上的记录满足c1=2,所以需要将控制权传给CSEK)。
3)CSEK取得当前非聚集记录的下一条记录(3,rowid2),因为3!=2,所以扫描结束。将控制权传给RSET。(如果满足c1=2的记录数大于1条,需要继续传递记录给RSET,以此类推,直到遇到不满足c1=2的那条记录,结束操作。)
4)RSET得知操作结束。
5)发送结果集(包含记录(2,2))给客户端。
,如何执行呢?
首先删除c1列上的非唯一索引,然后在c1列上创建唯一索引:
drop index it1c1;
create unique index uit1c1 on t1(c1);
查询语句“select * from t1 where c1=2;”对应的执行计划为:
#RSET:[201, 2, 1];
#CSEK(SECOND):[201, 2, 1]; UIT1C1(T1), INDEX_