APP下载

利用SQL Server 2005索引视图提高数据库系统性能

2009-07-31何育朋朱思铭

科技经济市场 2009年5期
关键词:子句谓词子集

何育朋 朱思铭

摘要:本文阐述如何使用SQL Server 2005 Enterprise Edition 的索引视图改善数据库系统的整体性能。

关键词:SQL Server 2005;database;DBMS

1索引视图的作用

Microsoft SQL Server 视图的主要作用是:

1.1提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中。

1.2提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式。

在SQL Server 2005中,具有唯一的聚集索引的视图称为索引视图。

2利用索引视图提高系统性能的方法

2.1可在视图上使用非聚集索引。

视图上的非聚集索引可提供更好的查询性能。与表上的非聚集索引类似,视图上的非聚集索引可提供更多选项,供查询优化器在编译过程中选择。例如,如果查询包含聚集索引所未涉及的列,那么优化器可在计划中选择一个或多个辅助索引,避免对索引视图或基表进行费时的完全扫描。

对架构添加索引会增加数据库的开销,因为索引需要持续的维护。在索引数量和维护开销间寻求适当的平衡点时,应谨慎权衡。

2.2可在查询优化器中使用索引视图。

SQL Server 查询优化器自动决定何时对给定的查询执行使用索引视图。不必在查询中直接引用视图以供优化器在查询执行计划中使用。所以,现有的应用程序可运用索引视图,而不用更改应用程序本身。

查询优化器通过考虑几个条件来决定索引视图能否涵盖整个或部分查询。这些条件对应查询中的一个 FROM 子句并由下列这几个部分组成:

2.2.1查询 FROM 子句中的表必须是索引视图 FROM 子句中的表的超集。

2.2.2查询中的联接条件必须是视图中的联接条件的超集。

2.2.3查询中的聚合列必须可从视图中的聚合列的子集派生。

2.2.4查询选择列表中的所有表达式必须可从视图选择列表或未包含在视图定义中的表派生。

2.2.5如果与其他谓词所匹配的行的超集相匹配,那么该谓词将归入另一个谓词。例如,“T.a=10”归入“T.a=10 and T.b=20”。任何谓词都可归入其自身。视图中限制表值的那部分谓词必须归入查询中限制相同表的那部分谓词。此外,必须以 SQL Server 可验证的方式实现这一点。

2.2.6属于视图定义中的表的查询搜索条件谓词的所有列必须出现在下列视图定义的一项或多项中:

(1)一个 GROUP BY 列表。

(2)视图选择列表(如不存在 GROUP BY)。

(3)视图定义中相同或等价的谓词。

情况(1)和(2)允许 SQL Server 对视图的列应用查询谓词,以便进一步限制视图的列。情况 (3) 比较特殊,它不需要对列进行筛选,因此该列不必出现在视图中。如果查询不止包含一个 FROM 子句(子查询、派生表、UNION),优化器可能选择几个索引视图来处理查询,并将它们应用到不同 FROM 子句。

2.3可使用 NOEXPAND 视图提示。

当 SQL Server 处理按名称引用视图的查询时,视图的定义只有在仅引用基表时才会被正常扩展。这个过程称为视图扩展。其属于一种宏扩展形式。

NOEXPAND 视图提示可强制查询优化器将视图视为带有聚集索引的普通表。其可防止视图扩展。只有在 FROM 子句中直接引用索引视图,才会应用 NOEXPAND 提示。例如:

SELECT Column1, Column2, ...FROM Table1, View1 WITH (NOEXPAND) WHERE ...

2.4可使用 EXPAND VIEWS 查询提示。

处理按名称引用视图的查询时,除非对视图引用添加 NOEXPAND 提示,否则 SQL Server 总会扩展视图。该提示会尝试匹配索引视图和扩展查询,除非在查询末尾的一个 OPTION 子句中指定 EXPAND VIEWS 查询提示。例如,假设数据库中有一个索引视图 View1,以下,根据其逻辑定义(其 CREATE VIEW 语句)对 View1 进行了扩展,然后 EXPAND VIEWS 选项会阻止在计划中使用 View1 的索引视图来解析该查询。使用语句如下:

SELECT Column1, Column2, ... FROM Table1, View1 WHERE ...

OPTION (EXPAND VIEWS)

如要确保让 SQL Server 通过从查询所引用的基表直接访问数据来处理该查询,而不必访问索引视图,那么可使用 EXPAND VIEWS。在某些情况下,EXPAND 视图有助于消除因使用索引视图而导致的锁争用。在测试应用程序时,NOEXPAND 和 EXPAND VIEWS 都可帮助用户在使用和不使用索引视图的情况下进行性能评估。

对数据库系统确定一组适当的索引可能很复杂。如果在设计一般索引时需要考虑众多可能性,那么对架构添加索引视图会大幅提高设计和潜在结果的复杂性。例如,索引视图可用于:

2.4.1查询中引用的表的任何子集。

2.4.2该表子集的查询中的条件的任何子集。

2.4.3组合的列。

2.4.4聚合函数(比如:SUM)。

2.5可应用DTA优化物理数据库的设计。

数据库优化顾问 (DTA) 是 SQL Server 2005 的一项功能,可有效优化物理数据库设计。使用 DTA 可让管理员有一个更清晰的思路,可以更准确地、有针对性地组合使用确定索引、索引视图和分区策略,从而简化了物理数据库的设计过程。

3结束语

下图说明了使用以上方法通常所能取得的性能改进程度:

实践证明,灵活使用上述方法,能提高数据库整体性能。

参考文献:

[1]Microsoft SQL Server 2005 Enterprise Edition English version helper document.

[2] ROBIN DEWSON.《SQL SERVER 2005基础教程》[M].北京:人民邮电出版社,2006.

[3] SOLID QUALITY LEARNING[美].SQL SERVER 2005从入门到精通(应用技术基础)[M],北京:清华大学出版社,2006.

猜你喜欢

子句谓词子集
命题逻辑中一类扩展子句消去方法
拓扑空间中紧致子集的性质研究
被遮蔽的逻辑谓词
——论胡好对逻辑谓词的误读
命题逻辑可满足性问题求解器的新型预处理子句消去方法
连通子集性质的推广与等价刻画
党项语谓词前缀的分裂式
关于奇数阶二元子集的分离序列
西夏语的副词子句
也谈“语言是存在的家”——从语言的主词与谓词看存在的殊相与共相
命题逻辑的子句集中文字的分类