数据库程序设计—— SQL Server 2000 数据库程序设计

58
数数数数数数数—— SQL Server 2000 数数数数数数数 数1数 SQL Server 数数 数2数 数数数数数数数数 数3数 数数数数数数数数 数4数 数数数数数数数 数5数 Transact-SQL 数 数6数 数数 Transact- SQL 数数数数 数7数 数数数数 数8数 数数数数数数数 数9数 数数数数 数 10 数 数数数 数 11 数 数数数数 数 12 数 数数数数数数 数 13 数 数数数数 数 14 数 数数数数数数数 数 15 数 数数数数 数 16 数 数数数数数数 数 17 数 数数数数数数数数 数 18 数 数数数数数 数 19 数 数数数数数数 20 数数数数数数 数 21 数 数数数数 数 22 数 数数数数数数

description

数据库程序设计—— SQL Server 2000 数据库程序设计. 第 12 章 全文索引查询 第 13 章 规划索引 第 14 章 创建和维护索引 第 15 章 实现视图 第 16 章 实现存储过程 第 17 章 实现用户定义函数 第 18 章 实现触发器 第 19 章 多服务器编程 第 20 章 优化查询性能 第 21 章 分析查询 第 22 章 管理事务和锁. 第 1 章 SQL Server 概述 第 2 章 创建和管理数据库 第 3 章 创建数据类型和表 - PowerPoint PPT Presentation

Transcript of 数据库程序设计—— SQL Server 2000 数据库程序设计

数据库程序设计—— SQL Server 2000 数据库程序设计

第 1 章 SQL Server 概述第 2 章 创建和管理数据库第 3 章 创建数据类型和表第 4 章 实现数据完整性第 5 章 Transact-SQL 介绍第 6 章 使用 Transact-SQL查询工具第 7 章 检索数据第 8 章 数据分组与汇总第 9 章 多表联接第 10 章 子查询第 11 章 修改数据

第 12 章 全文索引查询 第 13 章 规划索引 第 14 章 创建和维护索引 第 15 章 实现视图 第 16 章 实现存储过程 第 17 章 实现用户定义函数 第 18 章 实现触发器 第 19 章 多服务器编程 第 20 章 优化查询性能 第 21 章 分析查询 第 22 章 管理事务和锁

第 20 章 优化查询性能

查询优化器介绍获得执行计划信息使用索引来覆盖查询索引策略替代查询优化器推荐操作

查询优化器介绍

查询优化器的功能查询优化器使用基于成本的优化查询优化器工作过程查询优化阶段缓存执行计划设置成本限制

20.1 查询优化器介绍

查询优化器的功能

查询优化器是负责为查询产生最优化的执行计划的组件决定最有效率的执行计划

确定是否存在索引并评估索引对查询的有用性 确定可使用哪些索引和列来减少查询所检查的行的

数目 确定处理联接操作的最佳策略,例如以何种顺序联

接表和使用何种联接策略 对给定查询的多种计划使用基于成本的评估,以选

择出最有效率的计划 创建列统计以提高查询性能

20.1.1 查询优化器的功能

查询优化器的功能(续)

使用的额外信息 底层数据 本身的内部操作中得出的分类信息

产生执行计划 查询优化器产生执行计划,概述了进行查询的步

骤及其顺序 查询优化器优化寻找、联接、分组和排序行的处

理过程

20.1.1 查询优化器的功能

查询优化器使用基于成本的优化

查询优化器的优化是基于成本的

限制优化计划的数量 查询优化器限制它所考虑的优化计划的数量 查询优化器选择最快地返回结果且资源消耗合理的计划

决定查询处理时间的因素 查询性能取决于查询优化器使用的物理运算符以及它们的

顺序 优化目的是为了减少返回的行数、减少读入页的数目、通

过使用最少的 I/O 和 CPU 资源以减少执行计划总的处理时间

20.1.2 查询优化器使用基于成本的优化

查询优化器工作过程20.1.3 查询优化器工作过程

查询提交后,经过多个步骤将原始的查询转换成查询优化器可以解释的格式 解析过程:此步骤的输出是解析查询树

标准化过程:此步骤的输出是标准化查询树

查询优化:包括查询分析、索引选择和联接选择步骤

编译:查询被编译成可执行代码

数据库访问路由:查询优化器通过进行数据表扫描或使用可用的索引来确定访问数据的最佳方法,然后应用此法

查询优化阶段

查询优化过程包括三个阶段:查询分析、索引选择和联接选择

查询分析 查询优化的第一个阶段称为查询分析 通过限制搜索,查询优化器尽量减少所处理的行的数目,

这样减少了所要读入的索引和数据页的数目 在查询分析阶段,查询优化器查看查询的每个子句,确定

是否能用来限制扫描的数据量。就是说,确定那个子句是否是个搜索参数( SARG )或联接条件的一部分

20.1.4 查询优化阶段

查询优化阶段(续)

索引选择 索引选择是查询优化的第二个阶段 索引的可用性是根据结果将会返回多少行决定的 若 SARG 中使用了索引的第一列,且 SARG 设定了搜索的

下界、上界或者二者兼有,那么索引是潜在有用的 查询优化器使用索引和非索引列上的统计信息来确定对特

定查询最合适的处理策略

联接选择 联接选择是查询优化的第三个阶段 若查询中包含多表联接或者自联接,这个阶段将根据选择

性、密度、内存开销等等因素来评估使用何种联接策略

20.1.4 查询优化阶段

缓存执行计划

SQL Server 用一个内存池来存储执行计划和数据缓存 存储执行计划的那部分内存池称为过程缓存 不太可能重用的和成本低的计划不放入缓存中

在内存中存储执行计划 执行计划是可重用的、只读的数据结构,可被任意数量的

用户使用,其中并不存储用户环境 内存中执行计划的副本从不超过两份:一份供所有的串行

执行,另一份供所有的并行执行,而无论并行度如何

20.1.5 缓存执行计划

缓存执行计划(续)

使用执行环境 执行查询的用户都有一个数据结构,用于保存执

行的特定数据,例如参数值。这个数据结构称为执行环境

当执行一条 Transact-SQL 语句的时候, SQL Server 扫描过程缓存,若找到相同语句的执行计划,则重用之;否则 SQL Server 为查询产生新的执行计划

20.1.5 缓存执行计划

缓存执行计划(续)

重新编译执行计划 数据库的某些变化会使执行计划效率变低或者不

再准确 当 SQL Server 检测到使执行计划无效的变化时,

将执行计划标记为无效。当下次连接执行查询的时候,编译新的执行计划

20.1.5 缓存执行计划

缓存执行计划(续)

使执行计划无效的情形 对查询所引用的表或视图的任何结构性的变化( ALTER

TABLE 及 ALTER VIEW 语句) 显式地用语句例如 UPDATE STATISTICS 或自动地产生新的分布统计信息

删除执行计划使用的索引 显式调用系统存储过程 sp_recompile

对键的大量更改,或者对查询引用的表的大量 INSERT 或 DELETE 语句

对定义了触发器的表,若 inserted 或 deleted 表中行的数目显著增长

20.1.5 缓存执行计划

设置成本限制

可以通过设定成本限制来控制执行查询的开销 查询成本是指在特定硬件配置中,执行查询所耗费的估计时间(以秒为单位)

指定上限:通过查询调控器实现 可以使用 query governor cost limit 选项阻止执行长时间运行的查询,从而防止消耗系统资源

虽然配置值是用秒指定的,但实际上与时间无关,而是查询的实际估计成本。可以指定允许查询运行的成本上限

20.1.6 设置成本限制

设置成本限制(续)

指定连接的限制 使用存储过程 sp_configure 对所有连接应用成本限

制 运行 SET QUERY_GOVERNOR_COST_LIMIT 语句对

特定连接应用成本限制指定为 0 (默认值)将关闭查询调控器

20.1.6 设置成本限制

第 20 章 优化查询性能

查询优化器介绍获得执行计划信息使用索引来覆盖查询索引策略替代查询优化器推荐操作

获得执行计划信息

查看 STATISTICS 语句输出查看 SHOWPLAN_ALL 和 SHOWPLAN_TEXT 输出以图形方式查看执行计划

20.2 获得执行计划信息

查看 STATISTICS 语句输出20.2.1 查看 STATISTICS 语句输出

STATISTICS TIME

显示分析、编译和执行语句所需的时间(以毫秒为单位)

STATISTICS PROFILE

显示语句的配置文件信息。当执行查询的时候,附加结果集里包含查询的 SHOWPLAN_ALL 列和下面这些附加列

列 描述Rows 各运算符生成的实际行数Reuse 运算符执行的次数

查看 STATISTICS 语句输出(续)20.2.1 查看 STATISTICS 语句输出

STATISTICS IO显示查询产生的读入页面的次数信息。 STATISTICS IO 的

输出包括

值 描述 额外信息逻辑读 从数据高速缓存

读取的页数所有页通过数据缓存访问。若页不在缓存中,则需要从磁盘上物理读入页

物理读 从磁盘读取的页数

这个值总是小于或者等于逻辑读的值

预读 为查询放入高速缓存的页数

这个值高一点,可以降低物理读的值,并且提高缓存命中率

扫描计数 表被访问的次数 左联接的外部表的这个值应该为 1 。对内部表而言,逻辑读的数目等于扫描计数乘以每次扫描访问页的数目

查看 SHOWPLAN_ALL 和 SHOWPLAN_TEXT 输出

SHOWPLAN 语句输出的结构 以行集的形式返回信息 构成一棵层次树 表示了执行每条语句时查询优化器采取的步骤显示查询优化的估计值,而不是实际的执行计划

。估计值是基于现有统计信息的

20.2.2 查看 SHOWPLAN_ALL 和 SHOWPLAN_TEXT 输出

查看 SHOWPLAN_ALL 和 SHOWPLAN_TEXT 输出(续)

执行步骤的详细资料 哪一个表使用了哪一个索引 表的联接顺序 所选择的更新模式工作策略以及其他策略

SHOWPLAN_TEXT 和 SHOWPLAN_ALL 输出的不同 SHOWPLAN_ALL 的输出返回额外信息,例如估计

查询返回的行数、 I/O 、 CPU 和平均行大小

20.2.2 查看 SHOWPLAN_ALL 和 SHOWPLAN_TEXT 输出

以图形方式查看执行计划

图形执行计划的元素读取图形执行计划的输出使用 Bookmark Lookup 操作

20.2.3 以图形方式查看执行计划

图形化执行计划使用图标表示语句和查询的特定部分的执行,它包含以下元素

步骤是用来处理查询的工作的单位 步骤序列是步骤处理的顺序逻辑运算符描述用于处理语句的关系代数操作,

如执行聚合等 物理运算符描述用于处理语句的物理实现算法,

如扫描聚集索引

20.2.3 以图形方式查看执行计划以图形方式查看执行计划(续)

在 SQL 查询分析器中,从右到左、从上到下读取图形执行计划输出

每个步骤可能有一个或多个处理节点节点指的是查询优化器使用的一个操作,用图标表示 每个节点都与一个父节点相关 所有具有相同父节点的节点都绘制在相同的列内 用箭头将每个节点连接到其父节点递归操作用迭代符号显示 运算符显示为与特定父节点相关的符号 如果查询包含多个语句,则绘制多个查询执行计划

20.2.3 以图形方式查看执行计划以图形方式查看执行计划(续)

查看额外信息 当将游标指向每个节点(用图标表示)时,可以看到除下表

之外的关于物理和逻辑运算符的详细信息测量 描述

行计数 由运算符输出的行数预计行大小 由运算符输出的行的预计大小I/O 成本 用于操作的所有 I/O 活动的预计成本。该值应尽可能低CPU 成本 用于操作的所有 CPU 活动的预计成本执行次数 查询时执行操作的次数成本 查询优化器执行此操作的成本,包括此操作的成本占查询总成本

的百分比。由于查询引擎选择最高效的操作执行查询或执行语句,因此该值应尽可能低

子树成本 查询优化器执行此操作及同一子树内位于此操作之前的所有操作的总成本

参数 查询所使用的谓词和参数

20.2.3 以图形方式查看执行计划以图形方式查看执行计划(续)

Bookmark Lookup (书签查找)是查询优化器频繁使用的内部操作

当查询优化器识别出结果集的可能候选记录时,它记录标识行位置的信息(书签)并继续改善查询

一般在分析查询计划的所有步骤处理完之后使用书签查找操作

检索行 行标识符:在堆集中找到相应的行 聚集键:在聚集索引中找到相应的行

20.2.3 以图形方式查看执行计划以图形方式查看执行计划(续)

观察详情:在查询计划中书签查找操作的详情包括 用来在表或聚集索引中查找行的书签标签 行所在的表的名称或聚集索引的名称 若查询优化器确定预读是从表或聚集索引中找到书签的最好办法,则包含 WITH PREFETCH 子句

确定何时使用书签查找操作 在 WHERE 子句中包含 IN 子句或 OR 运算符的查询

20.2.3 以图形方式查看执行计划以图形方式查看执行计划(续)

第 20 章 优化查询性能

查询优化器介绍获得执行计划信息使用索引来覆盖查询索引策略替代查询优化器推荐操作

使用索引来覆盖查询

覆盖查询的索引介绍使用覆盖查询的索引定位数据识别可以用来覆盖查询的索引确定是否使用索引覆盖查询创建覆盖查询的索引的指导原则

20.3 使用索引来覆盖查询

覆盖查询的索引介绍

可创建覆盖常用查询的索引,以减少 I/O 数量 只有非聚集索引能覆盖查询 索引必须包含所有查询中引用的列 当查询被索引覆盖时,查询优化器不需要访问数

据页 索引视图可以预聚合数据,提高查询性能覆盖查询的索引能快速地检索数据

20.3.1 覆盖查询的索引介绍

使用覆盖查询的索引定位数据

单页导航示例部分扫描导航示例完全扫描导航示例

20.3.2 使用覆盖查询的索引定位数据

索引页改非叶级

叶级(键值)

SELECT lastname, firstnameFROM memberWHERE lastname = 'Hall'

SELECT lastname, firstnameFROM memberWHERE lastname = 'Hall'

AkhtarAkhtarBarrBarrBarrBarrBormBormBuhlBuhl

SarahSarah……………………

GanioGanioHallHallHartHartJonesJonesJonesJones

JonJonDonDonSherriSherriAmyAmyBeverlyBeverly

Hall DonLangLangMartinMartinMartinMartinMartinMartinMorisMoris

EricEric……………………

数据页改

… …

AkhtarAkhtarLangLang…………

SarahSarahEricEric…………

AkhtarAkhtar……GanioGanio……

SarahSarah……JonJon……

LangLang………………

EricEric………………

单页导航发生在只有一个叶级页被读入的情形

20.3.2 使用覆盖查询的索引定位数据使用覆盖查询的索引定位数据(续)

索引页改非叶级

叶级(键值)叶级(键值)AkhtarAkhtarBarrBarrBarrBarrBormBormBuhlBuhl

…………………………

GanioGanioHallHallHartHart

JonesJonesJonesJones

…………………………

MorganMorganNashNashNayNayOtaOta

RuddRudd

…………………………

ChaiChaiConConConConCoxCoxDaleDale

…………………………

DunnDunnDunnDunnFineFineFortFortFunkFunk

…………………………

JordanJordanKimKimKimKimKochKochKochKoch

…………………………

LangLangMartinMartinMartinMartinMartinMartinMorisMoris

…………………………

SmithSmithSmithSmithSmithSmithSmithSmithSmithSmith

…………………………

数据页改

USE creditSELECT lastname, firstname FROM memberWHERE lastname BETWEEN 'Funk' AND 'Lang'

USE creditSELECT lastname, firstname FROM memberWHERE lastname BETWEEN 'Funk' AND 'Lang'

AkhtarAkhtarChaiChaiDunnDunnGanioGanio

……………………

JordanJordanLangLangMorganMorganSmithSmith

……………………

AkhtarAkhtarJordanJordan……

………………

部分导航发生在从叶级读入一个范围的页的情形

20.3.2 使用覆盖查询的索引定位数据使用覆盖查询的索引定位数据(续)

索引页改非叶级

叶级(键值)AkhtarAkhtarBarrBarrBarrBarrBormBormBuhlBuhl

…………………………

GanioGanioHallHallHartHart

JonesJonesJonesJones

…………………………

MorganMorganNashNashNayNayOtaOta

RuddRudd

…………………………

MartinMartinSmithSmith

……

AkhtarAkhtarGanioGanio

……

AkhtarAkhtar……

MartinMartin

ChaiChaiConConConConCoxCoxDaleDale

…………………………

DunnDunnDunnDunnFineFineFortFortFunkFunk

…………………………

JordanJordanKimKimKimKimKochKochKochKoch

…………………………

LangLangMartinMartinMartinMartinMartinMartinMorisMoris

…………………………

SmithSmithSmithSmithSmithSmithSmithSmithSmithSmith

…………………………

数据页改

USE creditSELECT lastname, firstnameFROM member

USE creditSELECT lastname, firstnameFROM member

完全扫描导航发生在读入所有叶级页的情形

20.3.2 使用覆盖查询的索引定位数据使用覆盖查询的索引定位数据(续)

识别可以用来覆盖查询的索引

以下事实影响索引覆盖查询的能力 查询需要的所有数据都必须包含在索引中,这包括所有被

引用的列 组合索引中的非首列对覆盖查询也是有用的 WHERE 子句不是必需的,查询优化器会扫描所有叶级页 若使用包含 WHERE 子句中所引用列的非聚集索引比聚集

索引需要更少的 I/O 操作,则使用非聚集索引覆盖查询 可以联接多个索引以覆盖查询

20.3.3 识别可以用来覆盖查询的索引

确定是否使用索引覆盖查询

观察图形化执行计划输出 若执行计划输出显示“扫描非聚集索引,可以扫

描全部内容,也可以只扫描一个范围”,则查询优化器可用索引覆盖查询

比较 I/O 操作 通过查看 STATISTICS IO 输出,比较 I/O 操作的次数来判定是否覆盖了查询

应该事先了解的信息 非聚集索引:非叶级的总级数、组成叶级的页的总数、每个叶级页的行的总数、每个数据页的行的总数

表:组成表的页的总数

20.3.4 确定是否使用索引覆盖查询

创建覆盖查询的索引的指导原则

当创建覆盖查询的索引时,考虑如下指导原则往索引中添加合适的列 尽量减小索引键的大小维护行和键值大小的比率

20.3.5 创建覆盖查询的索引的指导原则

第 20 章 优化查询性能

查询优化器介绍获得执行计划信息使用索引来覆盖查询索引策略替代查询优化器推荐操作

索引策略

估算访问一定范围数据的查询所使用的 I/O 数量多查询的索引创建索引的指导原则

20.4 索引策略

估算访问一定范围数据的查询所使用的 I/O 数量

访问方法访问方法访问方法访问方法

表扫描表扫描

charge_amt 列上聚集索引 charge_amt 列上聚集索引

charge_amt 列上非聚集索引charge_amt 列上非聚集索引

charge_amt 和 charge_no 列上组合索引charge_amt 和 charge_no 列上组合索引

页 页 I/OI/O页 页 I/OI/O

10 41710 417

1 042 1 042

100 273100 273

273 273

SELECT charge_noFROM chargeWHERE charge_amt BETWEEN 20 AND 30

SELECT charge_noFROM chargeWHERE charge_amt BETWEEN 20 AND 30

20.4.1 估算访问一定范围数据的查询所使用的 I/O 数量

查询优化器自动考虑多个执行计划并评估每个执行计划所需要的 I/O ,然后使用最少 I/O 的执行计划

多查询的索引

USE creditSELECT charge_no, charge_dt, charge_amtFROM chargeWHERE statement_no = 19000 AND member_no = 3852

USE creditSELECT charge_no, charge_dt, charge_amtFROM chargeWHERE statement_no = 19000 AND member_no = 3852

USE creditSELECT member_no, charge_no, charge_amtFROM chargeWHERE charge_dt between '07/30/1999'AND '07/31/1999' AND member_no = 9331

USE creditSELECT member_no, charge_no, charge_amtFROM chargeWHERE charge_dt between '07/30/1999'AND '07/31/1999' AND member_no = 9331

示例 1示例 1

示例 2示例 2

20.4.2 多查询的索引

为多个查询选择合适的索引比为单个查询困难,因为对一条查询是最佳的索引对其他查询未必是最佳的。目标是通过评估 I/O ,使所有高优先级的查询获得可接受的性能

创建索引的指导原则

创建对查询优化器有用的索引的指导原则 确定所有查询的优先权 确定每个查询的 WHERE 子句的每个部分的选择性 确定是否创建索引 确定应该被索引的列 确定组合索引的最佳列顺序 确定对其他索引的需求程度 创建索引后,测试每个优先级最高的查询的性能

20.4.3 创建索引的指导原则

第 20 章 优化查询性能

查询优化器介绍获得执行计划信息使用索引来覆盖查询索引策略替代查询优化器推荐操作

替代查询优化器

确定何时替代查询优化器使用提示和 SET FORCEPLAN 语句替代查询优化器之后确认查询性能

20.5 替代查询优化器

确定何时替代查询优化器

若查询无法有效执行,可使用优化器提示替代查询优化器 优化器提示是包含在查询中的关键字,用来强制特定的优化

操作应该限制使用优化器提示,因为它生成的优化是静态的

优化器提示使查询优化器不能随变化的环境而调整 使用优化器提示后,应该经常监视查询性能以检验查询是否

被优化执行考虑替代查询优化器之前,应尝试其他方法,如

更新统计信息 重新编译存储过程 重新查看查询或 SARG 以确定是否要重写 评估建立不同索引的可能性

20.5.1 确定何时替代查询优化器

使用提示和 SET FORCEPLAN 语句

可使用提示或 SET FORCEPLAN 语句替代查询优化器 可在 SELECT 、 INSERT 、 UPDATE 或 DELETE 语句内指定

优化器提示 一共有三种提示可用来替代查询优化器:表提示、联接提示、查询提示

表提示:表提示指定了表扫描、查询优化器使用的一个或多个索引、查询优化器在表或查询上使用的锁定方法

虽然可以指定多个表提示,但每个表提示只能指定一次 WITH 子句必须在紧接着表名称之后指定

联接提示 联接提示在两表间强制联接策略。联接提示在查询的 FROM

子句指定

20.5.2 使用提示和 SET FORCEPLAN 语句

使用提示和 SET FORCEPLAN 语句(续)

查询提示:可控制更大范围内的动作。通过使用 OPTION 子句,可指定查询优化器使用特定提示

可指定多个提示,但每个提示只能指定一次 OPTION 子句必须与语句最外层的查询一起指定 查询提示影响语句中的所有操作 若主查询中使用了 UNION ,只有最后一个使用 UNION 运

算符的查询可以使用 OPTION 子句

SET FORCEPLAN 语句 可以强制查询优化器以表在 FROM 子句中列出的顺序联接

表。当使用 SET FORCEPLAN 语句时,查询优化器只使用嵌套循环联接

语法: SET FORCEPLAN {ON | OFF}

20.5.2 使用提示和 SET FORCEPLAN 语句

替代查询优化器之后确认查询性能

校验性能改善 为了校验优化器提示是否改善性能,打开

STATISTICS IO 和 STATISTICS TIME 选项并在查询分析器中选择“显示执行计划”

将使用优化器提示的原因写入文档 若替代查询优化器改善了性能,确保将原因写入文档

经常重新测试查询 查询优化器是动态的,随数据变化不断评估最好的

执行计划。若使用优化器提示,则执行计划变成静态的。所以,应该经常重新测试查询

20.5.3 替代查询优化器之后确认查询性能

第 20 章 优化查询性能

查询优化器介绍获得执行计划信息使用索引来覆盖查询索引策略替代查询优化器推荐操作

推荐操作

充分理解数据,以及查询如何访问数据充分理解数据,以及查询如何访问数据

为单个和多个查询建立索引策略为单个和多个查询建立索引策略

使用查询调控器阻止长时间运行的查询消耗系统资源使用查询调控器阻止长时间运行的查询消耗系统资源

创建覆盖最常用的查询的索引创建覆盖最常用的查询的索引

尽量避免替代查询优化器尽量避免替代查询优化器

20.6 推荐操作

目标使用图形化执行计划以测定查询如何分解比较被索引覆盖或不覆盖的查询的 I/O

比较检索范围数据的查询的 I/O

使用优化器提示强制索引和联接方法的使用练习 1 使用图形执行计划确定如何解析查询练习 2 比较索引覆盖的查询与索引未覆盖的查询之 间的 I/O

练习 3 比较检索一定范围内数据的查询所需的 I/O 数量

可选 利用优化程序提示强制 使用索引或联接

45 分钟

实验 优化查询性能

回顾

学习完本章后,将能够:解释查询优化器的角色以及它如何工作以确保查询得到优化使用多种方法获得执行计划的信息,以测定查询优化器如何处理查询以及确认产生最有效的执行计划创建覆盖查询的索引确定减少页读入的索引策略评估何时替代查询优化器

随堂练习 1

机器 A 和机器 B都各有一个 SQL Server 2000 数据库。机器 B 中的数据更新来自机器 A 。每个月底,机器 A 将所有的数据发送给机器 B 。现如果要同时查询来自两个机器的数据,请问应如何使查询变得最快?(选择三个选项)A. 创建存储过程使用 OPENROWSET 语句返回数据B. 创建存储过程查询公司 B 中所需的表内的数据C. 创建脚本使用 OPENQUERY 语句获取数据D. 在机器 A 的数据库中使用系统存储过程

sp_addlinkedserver

E. 在机器 A 的数据库中使用系统存储过程sp_addlinkedsrvlogin

F. 在机器 B 的数据库中使用系统存储过程sp_serveroption

随堂练习 2

在数据库中需要优化一些存储过程,但不能影响数据库的运作。请问应当如何优化这些存储过程 ?

A. 在每个存储过程中 WHERE 子句中的列上创建索引

B. 在每个存储过程中的查询列上创建nonclustered 索引

C. 对每个存储过程中所有 SELECT 和WHERE 子句使用 CREATE STATISTICS语句

D. 使用索引调整向导决定添加哪些索引

随堂练习 3

一个 SQL Server 2000 数据库安装在一台 Windows 2000 Server 服务器上。所有的数据表都有索引。 SQL Server 是服务器上唯一的应用程序。用户报告服务器在执行更新和插入操作时速度很慢。请问应如何查明原因?A. 使用 SQL Server 的系统监视器检查原因B. 使用 sp_configure系统存储过程增加 SQL

Server 可使用锁的数量C. 运行 SQL Profiler ,添加 SQL:BatchCompleted

和 RPC:Completed 事件以及 EventClass 和TextData 数据列。将 Profiler 的输出输入到索引调整向导

D. 增加最小服务器内存选项的值

随堂练习 4

在某企业的局域网环境众,多个基于 Web 应用程序向一个的 SQL Server 2000 数据库发出大量的请求,以获取数据信息。使用下列选项中的哪种方法可以检查哪些应用程序向一个 SQL Server 2000 数据库发出大量的请求?A. 运行 SQL Profiler ,添加 RPC:Completed 事件,跟踪 HostName 数据列

B. 运行 SQL Profiler ,添加 Stmt:StmtCompleted 事件,跟踪 ApplicationName 数据列

C. 运行 SQL Server 的系统监视器监视SQLServer:Database 计数器,选择数据库所有计数器

D. 运行 SQL Server 的系统监视器监视SQLServer:General Statistics 计数器,选择数据库的所有数据列

随堂练习 5

由于数据量的增大,某个 SQL Server 2000 数据库的插入,删除,修改操作的响应速度已经变慢。原先的设计人员设计创建了大量必要的数据索引。如今,许多索引已经不再使用,为了提高数据库数据操作的速度,应当如何优化?A. 执行 DBCC UPDATEUSAGE 语句更新

systemindexes系统表B. 执行 DBCC SHOW_STATISTICS 语句找到并删除

高密度索引C. 针对负载文件运行索引调整向导,删除和创建向导建议的索引

D. 使用 SQL Profiler 查找表扫描,在找到表扫描的表中添加索引

随堂练习 6

由于数据量的增大以及使用需求的变化,某个SQL Server 2000 数据库的插入,删除,修改操作的响应速度已经变慢,需要优化。经过调查发现原先的设计人员创建了大量必要的数据索引,但是一些查询不再使用,又添加了新的存储过程和数据表。请问应当如何优化?(选择两个选项) A. 针对负载文件运行索引调整向导B. 使用 SQL Profiler…

C. 执行 DBCC UPDATEUSAGE 语句…

D. 执行 DBCC SHOW_STATISTICS 语句…

E. …在找到表扫描的表中添加索引…

F. …更新 systemindexes系统表G. …找到并删除高密度索引H. …删除和创建向导建议的索引