首页 理论教育数据库性能管理:扫描范围决策和验证条件

数据库性能管理:扫描范围决策和验证条件

【摘要】:如果已确定SQL的执行计划,需要清楚了解扫描某个对象时与何条件相关联。“AND客户号=105”是访问表后检查的条件,所以可以说是与整体访问速度无关的条件。这时范围缩小,响应速度也随之得到改善。图3-8使用LIKE和通配符时的索引扫描如“WHERE姓名= ‘C’ AND生日LIKE ‘% 10’ AND客户号=105”条件语句决定索引扫描范围的条件是:WHERE姓名= ‘C’此时索引扫描范围为3个行。因此使用ROWID访问表的行为2个。

如果已确定SQL的执行计划,需要清楚了解扫描某个对象时与何条件相关联。以下例子将对由客户姓名+生日生成的索引进行范围扫描,并使用ROWID访问客户表。使用索引如图3-7所示。

图3-7 使用索引

例如想知道“WHERE姓名=‘C’AND生日> ‘92/12’ AND客户号=105”条件语句的各个条件用于哪个步骤,决定索引扫描范围的是:

WHERE 姓 名= ‘C’ AND生 日 > ‘92/12’

此时索引扫描范围为2个行,并使用ROWID访问2个表行。

“AND客户号=105”是访问表后检查(Check)的条件,所以可以说是与整体访问速度无关的条件。

姓名+生日的索引范围是2个行,但如果使用客户号设置索引,则设置范围为一个行。这时范围缩小,响应速度也随之得到改善。

使用LIKE比较索引中的列时若常数值为%、_等通配符(图3-8),则无法缩小索引的范围。因此即便有索引也等于没有使用。(www.chuimin.cn)

图3-8 使用LIKE和通配符时的索引扫描

如“WHERE姓名= ‘C’ AND生日LIKE ‘% 10’ AND客户号=105”条件语句决定索引扫描范围的条件是:

WHERE姓名= ‘C’

此时索引扫描范围为3个行。

“AND生日LIKE ‘ %10’”将成为使用ROWID访问表行之前检查的条件。因此使用ROWID访问表的行为2个。AND客户号=105

这是访问表后检查的条件。可以说是与整体访问速度无关的条件。