SAPR3性能优化指南(1)7567.docx
MS SQL Server 7.0 的 SAP R/3 性能优化指南 1998 年 11 月发行 读者 本文档所提供的的信息可以帮帮助 SAPP R/3 数据库管理理员理解 MMicrossoft® SQL SServerr 7.00 的各个方方面。这些方方面可以经过过优化,从而而在与 SAAP R/33 环境相关关的特有数据据库工作负荷荷条件下提供供最佳性能。 虽然本文档是为为 SAP R/3 站站点量身定制制的,但是一一定要注意本本文档中描述述的 SQLL Servver 功能能和优化技巧巧不仅仅适用用于 SAPP R/3。大大型到超大型型数据库 (VLDB) 需要支持持大量用户连连接和大的工工作负荷,工工作于这一环环境中的数据据库管理员将将从本文的信信息中获益匪匪浅。 引言 本篇有关性能优优化的文档将将讨论 SAAP R/33 环境中的的 SQL Serveer 7.00 最佳配置置。本指南分分为四个逻辑辑部分。第一一部分,讨论论与 Miccrosofft Winndows NT® SServerr 相关的配配置选项。第第二部分,描描述 SAPP R/3 环境中 SSQL Seerver 的重要配置置选项。前面面这两个部分分直截了当,其其中还包含了了在 SQLL Servver 的初初始配置过程程中几分钟就就可以完成的的一些步骤。第第三部分,讨讨论 SQLL Servver 的索索引设计,因因为它与 SSAP R/3 相关。索索引分析往往往是一个极其其棘手的过程程,为使数据据库性能最佳佳需要持续不不断地执行索索引分析。 Microosoft TechNNet 中的的“Micrrosoftt SQL Serveer 7.00 性能优化化指南”应该该作为本文第第三部分的补补充读物。该该指南综合讨讨论硬件 II/O 性能能、索引设计计以及 SQQL Serrver 性性能优化工具具。第四部分分,讨论 RR/3 数据据库中的 SSQL Seerver 文件和文件件组的最佳应应用。 Windowss NT 配配置 Windowss NT 页页面文件的大大小应该至少少比服务器上上安装的 RRAM 大三三倍,而且要要至少有 110 亿字节节 (1 GGB)。 设置页面文件大大小 1. 在开始菜单上,指指向设置,然后单单击控制面板板。 2. 双击系统,然后后双击性能选项卡。 3. 单击更改,然后后在起始大小小 (MB) 框中,输输入页面文件件的大小(按按兆字节 (MB) 计计)。 4. 单击确定。 通常,VMM(虚虚拟内存管理理器)已经根根据 SQLL Servver 安装装的默认设置置进行了适当当的配置。 检查和/或配置置 VMM 设置 1. 在开始菜单上,指指向设置,然后单单击控制面板板。 2. 双击网络,然后后单击服务选项卡。 3. 双击服务器,选选择最大化网网络应用程序序吞吐量,然然后单击确定定。 配置最小影响的的屏幕保护程程序和墙纸 1. 在开始菜单上,指指向设置,然后单单击控制面板板。 2. 双击显示,然后后单击背景选项卡。 3. 选定图案为(无无),并选定定墙纸为(无无)。 4. 单击应用,然后后单击屏幕保保护程序选项项卡。 5. 在屏幕保护程序序下,选定 BBlank Screeen,然后选选定密码保护护。 6. 单击应用。 一些多处理器服服务器可以将将联网 I/O 请求动动态分发到最最不繁忙的处处理器。该硬硬件功能有助助于防止在服服务于许多联联网请求的系系统中出现处处理器瓶颈和和不良网络性性能。该功能能通常称为对对称中断分发发,使用该功功能可以改进进可扩展性能能并防止出现现在其它处理理器还有剩余余容量时某一一个处理器却却成为瓶颈的的情况。它在在 Penttium 处处理器系列的的 Winddows NNT 4.00 HAL(硬硬件抽象层)中中可以找到。WWindowws® 20000 也支持该该功能。 不同处理器操作作平台使用不不同方法分发发中断。网卡卡的中断分发发是由每个处处理器操作平平台的 HAAL 来控制制的。HALL 实施的中中断方案取决决于处理器的的性能。某些些处理器包含含了中断控制制硬件,如高高级可编程中中断控制器 (APICC)。APIIC 允许处处理器将中断断路由到计算算机上的其它它处理器。有有关特定处理理器操作平台台所使用的分分发方法的详详细信息,请请咨询操作平平台供应商。 在默认情况下,WWindowws NT 4.0 不不使用对称中中断分发,而而是将与网卡卡 (NICC) 相关的的延迟进程调调用 (DPPC) 活动动分配给系统统中编号最大大的处理器。在在安装有多个个 NIC 且 NICC 活动的系系统中,每个个额外的 NNIC 的活活动都指派到到下一个编号号最大的处理理器。 如果处理器频繁繁以百分之百百的容量(性性能监视器所所显示的 PProcesssor: % Proocessoor Timme = 1100%)操操作而且一半半以上时间用用于为 DPPC 提供服服务上(即如如果 Proocessoor: % DPC TTime >> 50%),那那么可以通过过调整 PrrocesssorAfffinityyMask 来提高性能能。 警告 注册表编编辑器使用不不当会导致严严重的问题,有有可能需要重重新安装操作作系统。使用用注册表编辑辑器要特别小小心。Miccrosofft 不保证证能够解决因因注册表编辑辑器使用不当当而导致的问问题。建议您您在执行修改改前备份注册册表内容,这这样在注册表表修改出现问问题时就能够够还原内容。有有关备份和还还原注册表信信息的说明可可以在注册表表编辑器的联联机帮助中找找到。 在能够进行对称称中断分发的的多处理器服服务器上,将将 Winddows NNT 注册表表中 ProocessoorAffiinityMMask 数数值项的值设设置为零。这这样就会将网网络 I/OO 请求动态态分发到最有有能力处理请请求的处理器器中。ProocessoorAffiinityMMask 位位于:HKEEY_LOCCAL_MAACHINEE Sysstem CurreentConntrolSSet SServicces NNDIS Parammeterss。 启动注册表编辑辑器以设置 ProceessorAAffiniityMassk 1. 在开始菜单上,单单击运行。 2. 键入 regeedt32。 在注册表编辑器器中找到适当当关键字 1. 在窗口菜单中选选择 HKEEY_LOCCAL_MAACHINEE。 2. 在注册表编辑器器左边窗格中中,双击 SSYSTEMM。 3. 双击 CurrrentCoontrollSet,双双击 Serrvicess,双击 NNDIS ,然然后双击 PParameeters。 将 ProceessorAAffiniityMassk 设置为为零 1. 在注册表编辑器器右边窗格中中,双击 PProcesssorAfffinittyMaskk。 2. 键入 0(零),然然后单击确定定。 3. 在注册表菜单上上,单击退出出。 SQL Serrver 配配置 SQL Serrver 内内存的推荐设设置取决于 R/3 实实例对数据库库服务器的使使用情况。如如果 SQLL Servver 是作作为专用数据据库服务器而而运行,建议议 SQL Serveer 按照默默认值动态调调整它所需要要的内存。 R/3 实例最小值最大值专用数据库服务务器默认值默认值更新实例已安装 RAMM 的 400%已安装 RAMM 的 655%中心实例已安装 RAMM 的 455%已安装 RAMM 的 455%在有 2 GBB RAM 的中心实例例上设置内存存的例子 (Enterrprisee Manaager) 1. 在右边窗格中,双双击 SQLL Servver Grroup 图图标。 2. 双击 R/3 数据库服务务器的 SQQL Serrver 图图标。 3. 单击 Memoory 选项项卡,然后单单击 Usee a fiixed mmemoryy sizee (MB)。 4. 将 Use aa fixeed memmory ssize (MB) 下下的滑块移动动到 9000。 5. 选定 Reseerve pphysiccal meemory for SSQL Seerver ,单击 Appply ,然然后单击 OOK。 完成 SQL Serveer 的内存存配置之后,建建议使用 sset woorkingg set size 选项保留与与 SQL Serveer 内存设设置相等的物物理内存空间间。设置该选选项意味着 Windoows NTT 不转换出出 SQL Serveer 页。 配置设置工作集集大小选项的的例子 (EEnterpprise Managger) 1. 在右边窗格中,双双击 SQLL Servver Grroup 图图标。 2. 双击 R/3 数据库服务务器的 SQQL Serrver 图图标。 3. 单击 Memoory 选项项卡,然后选选定 sellect RReservve phyysicall memoory foor SQLL Servver。 4. 单击 Applly,然后单单击 OK。 SAP 测试显显示出,在大大多数 R/3 数据库库服务器操作作环境下网络络数据包大小小为 8,1192 字节节时性能最佳佳。该选项需需要使用 SSQL Seerver Queryy Anallyzer 来设置。 设置网络数据包包大小 (QQuery Analyyzer) 1. 键入 execc sp_cconfiggure ''netwoork paacket size'', 81992。 2. 键入 recoonfiguure wiith ovverridde。 3. 按 CTRL + E 执行以以上命令。 在专用服务器上上,建议使用用 SQL Serveer priiorityy boosst 选项。 设置优先级提升升选项 (EEnterpprise Managger) 1. 在右边窗格中,双双击 SQLL Servver Grroup 图图标。 2. 双击 R/3 数据库服务务器的 SQQL Serrver 图图标。 3. 单击 Proccessorr 选项卡,然然后在 Prrocesssor Coontroll 框中,选选定 Booost SQQL Serrver pprioriity onn Winddows NNT。 建议将 SQLL Servver inndex ccreatee memoory 选项项配置为 116 MB。该该选项需要使使用 SQLL Servver 查询询分析器来设设置。 设置索引创建内内存选项 (Queryy Anallyzer) 1. 键入 execc sp_cconfiggure ''indexx creaate meemory'', 160000。 2. 键入 recoonfiguure wiith ovverridde。 3. 按 CTRL + E 执执行以上命令令。 禁用 VBHDDR、VBMMOD 和 VBDATTA 表的页页面锁定 (Queryy Anallyzer) 1. 在查询窗口键入入以下命令: exec spp_indeexoptiion 'VVBHDR'','alllowpaggelockks','ffalse'' execc sp_iindexooptionn 'VBMMOD',''allowwpagellocks'','fallse' eexec ssp_inddexopttion ''VBDATTA','aallowppageloocks','falsse' 2. 按 CTRL + E 执执行以上命令令。 如果数据库服务务器上的所有有处理器的利利用率都很高高(性能监视视器表明在多多处理器服务务器上所有处处理器的处理理器利用率全全部大于 995%),那那么就有必要要打开 SQQL Serrver llightwweightt poolling。在在所有处理器器都非常接近近完全利用时时,lighhtweigght pooolingg 可以帮助助恢复大约 5% 到 7% 的 CPU。 打开 SQL Serveer ligghtweiight ppoolinng (Ennterprrise MManageer) 1. 在右边窗格中,双双击 SQLL Servver Grroup 图图标。 2. 双击 R/3 数据库服务务器的 SQQL Serrver 图图标。 3. 单击 Proccessorr 选项卡,选选定 sellect UUse Wiindowss NT FFiberss,然后单击击 Applly。 4. 当提示重新启动动 SQL Serveer 时,单单击 Yess,然后单击击 Ok。 SQL Serrver aaffiniity maask 配置置选项提供了了不能执行 SQL SServerr 线程的特特定处理器的的规范。最好好运用 SQQL Serrver 关关系掩码的默默认设置,即即零。关系掩掩码的设置为为零表明允许许在所有处理理器上执行 SQL SServerr 线程。几几乎在所有情情况下,该设设置都会使性性能最佳,因因为它避免了了在其它处理理器上有剩余余容量的情况况下而在某一一台处理器上上的 SQLL Servver 连接接非常繁忙的的情况。Miicrosooft 的 IT 机构构和参与 SSQL Seerver 7.0 EEarly Adoptter 计划划的 SAPP R/3 用户已运用用了关系掩码码的默认设置置,结果性能能良好。 索引设计与维护护 “Microssoft SSQL Seerver 7.0 性性能优化指南南”提供了有有关 SQLL Servver 索引引和性能优化化的重要信息息。此文档可可在“查找详详细信息”处处找到。 大型的 SAPP R/3 安装会有一一些包含非常常多行的 SSQL Seerver 表。有了大大的表,索引引对数据库 I/O 性性能影响极大大。 在单个数据库行行或少量数据据库行上搜索索并执行的操操作,应该有有一个基于提提供最高级别别选择性的一一列或几列所所定义的非聚聚集或聚集索索引。这样,SSQL Seerver 查询处理器器和存储引擎擎就能够将检检索行所需的的 I/O 控制到最小小化。例如,如如果必须定期期从非常大的的 Ordeers 表中中根据 orrderidd 来检索单单个定单记录录,那么基于于 ordeerid 列列定义索引可可以加快查询询的速度就是是有意义的。 在多数数据库行行上搜索和执执行的操作应应该基于定义义范围扫描的的列定义聚集集索引。从非非常大的七月月份 Ordders 表表中检索所有有定单的查询询就是范围扫扫描的一个例例子。在这种种情况下,OOrderss 表的日期期列就是聚集集索引的最佳佳列。 即将发行的 SSAP R/3 4.55B 版本将将带有一个影影响 SQLL Servver 聚集集索引选择灵灵活性的重要要功能。在 4.5B 版中,R/3 数据字字典对除主键键列以外的列列聚集索引有有被动支持。被被动支持的意意思是:在数数据库表已改改变以致于聚聚集索引从主主键移至了另另一列或列集集的情况下,SSAP R/3 数据字字典会识别并并记录 SQQL Serrver 聚聚集索引的位位置。创建聚聚集索引需要要使用与 RR/3 工具具对应的 SSQL Seerver 工具。但是是,聚集索引引的位置在创创建之后不会会在数据库转转换和 R/3 版本升升级过程中丢丢失。 4.5B 以后后的 SAPP R/3 版本中有可可能包含 SSQL Seerver 聚集索引的的积极支持。积积极支持的意意思是:除前前面所讲到的的 R/3 Data Dictiionaryy供的支持外外,R/3 工具还将支支持在 SQQL Serrver 表表上的列(除除主键列以外外)的聚集索索引创建。 聚集索引支持中中的这些更改改与希望改进进其 R/33 报告查询询性能的 RR/3 数据据库管理员的的想法有很大大出入。运行行 SAP R/3 的的大型公司的的月末和季度度报告可能会会使用数据库库服务器上的的范围扫描。通通常情况下会会是这样一种种情况:在大大表上所执行行的范围扫描描将不以与定定义表的主键键相同的列为为基础。目前前,SAP R/3 SSQL Seerver 数据库实施施将所有表上上的主键配置置为聚集主键键。某些情况况对测试非主主键组成部分分且常常为了了报告目的而而用于大型表表的列的聚集集索引的使用用非常有利。AALTER TABLEE 命令用于于将聚集主键键更改为非聚聚集主键。 以下索引分析示示例讨论了这这样一种情况况,即将聚集集主键更改为为非聚集主键键以便聚集索索引可以基于于另一列进行行定义并预排排将聚集主键键更改为非聚聚集主键所涉涉及的步骤,这这一点是有意意义的。 有关聚集和非聚聚集索引选择择的详细信息息,应参阅“MMicrossoft SSQL Seerver 7.0 性性能优化指南南”。 SAP R/33 在 STT04 事务务处理中提供供 MSSTTATS 工工具,可以帮帮助 R/33 数据库管管理员跟踪数数据库服务器器上所执行的的 SQL Serveer 存储过过程的资源占占用。所有 R/3 与与数据库服务务器的正常交交互作用都使使用存储过程程执行。 MMSSTATTS 提供有有助于根据资资源使用区分分存储过程的的信息。MSSSTATSS 返回的信信息的例子包包括:存储过过程的调用次次数、用于调调用存储过程程的平均和最最长时间、存存储过程调用用所返回的行行平均数和总总行数、存储储过程是否使使用了游标、存存储过程用于于提取的时间间与空闲时间间等等。 MSSTATSS 提供了用用于确定在 R/3 数数据库服务器器上所运行的的费用最高的的存储过程的的重要工具。性性能分析应集集中于这些费费用最高的查查询。 使用以下 SQQL Serrver 表表示例可以模模仿与许多 SAP RR/3 表非非常类似的数数据模式。两两个示例查询询将使用该此此测试表进行行分析。其目目的是说明如如何在 R/3 数据库库服务器环境境中很好地利利用 SQLL Servver 索引引。 示例数据以下脚本创建名名为 sapptest11 的表并在在其中加入 100,0000 个记记录。第一个个名为 cool1 的列列没有选择性性。每一行的的 col11 数值是一一样的 (''000')。这是为了了模拟 SAAP R/33 中非常常常见的 MAANDT 列列,通常它不不太具有选择择性。第二个个名为 cool2 的列列设计为带有有一些选择性性,因为每隔隔 100 行就插入了了一个 'aa' 数值。 SQL SServerr moduulo (''%') 操操作符用于检检测每第 1100 行的的插入。最后后一个名为 col3 的的列的选择性性极高。每一一行都有唯一一的 coll3 数值。 创建示例数据 (Querry Anaalyzerr) 1. 在查询窗口键入入以下命令: create tablee sapttest1 ( coll1 chaar(4) not nnull ddefaullt '0000', ccol2 cchar(44) nott nulll defaault ''zzzz'', coll3 intt not null, filller chhar(3000) deefaultt 'abcc' ) ddeclarre coounterr int set nnocounnt on set countter = 1 whiile (countter <= 1000000) bbegin if (countter % 1000 = 0) PRINTT 'loaaded '' + COONVERTT (VARRCHAR(10),countter) + ' off 1000000 reecord'' if (counnter % 100 = 0) beginn inseert saaptestt1 (cool2,cool3) vvaluess ('a'',couunter) end else inserrt sapptest11 (coll3) vaalues (couunter) set counnter = couunter + 1 eend 2. 按 CTRL + E 执行命令。 示例索引SQL Serrver 主主键的 SAAP R/33 默认配置置是将主键设设置为聚集主主键。这在大大多数情况下下都提供了极极好的性能。但但是,可能有有一些独立的的表,将聚集集索引放在除除包含表的主主键列以外的的某一列上会会对这些表很很有用。 为 sapteest1 定定义的聚集主主键列在 RR/3 数据据库环境下是是很典型的,因因为它将完整整的非选择性性列 coll1(模拟典典型 R/33 环境的 MANDTT )放在索索引的开始处处。 非聚集索引 nnkey2 模仿典型的的 R/3 索引就在于于它是多列索索引。 创建示例索引 (Querry Anaalyzerr) 1. 在查询窗口键入入以下命令: alter ttable sapteest1 aadd coonstraaint ssapt_cc1 PRIIMARY KEY cclusteered (col1,col2,col3) creaate inndex nnkey2 on saaptestt1(coll2,coll3) 2. 按 CTRL + E 执行命令。 示例查询select * froom sapptest11 wherre coll3 = 55000 查询 1 根据据与名为 ccol3 的的列的匹配值值从测试表中中提取一行: select * froom sapptest11 wherre coll2 = ''a' 查询 2 是一一个范围扫描描,它根据与与名为 cool2 的列列的匹配值从从表中提取 1,0000 行。 在 SQL SServerr Querry Anaalyzerr 中报告查查询 I/OO 统计SQL Serrver QQuery Analyyzer 能能够从每个在在 Querry Winndow 执执行的查询中中提供有用价价值的 I/O 统计。这这在 SQLL Servver 文档档中一般称为为 Stattisticcs IO。要要启用该功能能,可以执行行一个 T-SQL 命命令,或设置置 Querry Anaalyzerr 菜单选项项。 通过 T-SQQL 命令使使用 SETT STATTISTICCS IO 选项 (QQuery Analyyzer) 1. 在查询窗口键入入以下命令: set staatistiics ioo on 2. 按 CTRL + E 执行命令。 通过菜单选项使使用 SETT STATTISTICCS IO 选项 (QQuery Analyyzer) 1. 在 Queryy Anallyzer 菜单上,单单击 Queery,然后后单击 Cuurrentt Connnectioon Opttions。 2. 选定 Showw Statts I/OO 然后单击击 Applly。 3. 单击 OK。 第一组索引的结结果单行提取数据:selecct * ffrom ssaptesst1 whhere ccol3 = 50000基于文本的 SShowPllan 输出出: |-Bookkmark Lookuup(BOOOKMARKK:(Bmmk10000), OOBJECTT:(puubs.dbo.sapttest1) |-Indeex Scaan(OBJJECT:(pubss.dbbo.ssaptesst1.nkey22), WWHERE:(sapptest11.cool3=55000) 等量图形显示计计划输出。 Stats II/O 的查查询结果集和和数据库 II/O (QQuery Analyyzer): col1 cool2 cool3 fiiller 000 aa 50000 abc (1 roow(s) affeccted) Tablee 'sapptest11'.Scaan couunt 1, logiical rreads 240, physiical rreads 0, reead-ahhead rreads 0. Showplaan 输出显显示查询处理理器需要执行行非聚集索引引 nkeyy2 的索引引扫描。索引引扫描是指:SQL SServerr 需读取 nkey22 的 B 树结构的叶叶级的部分或或全部,以便便找到键值 5000。此此操作要求 SQL SServerr 数据高速速缓存中的 240 个个 I/O。也也就是说要从从 SQL Serveer 高速缓缓冲存储器中中读取 2440 个 88 KB 的的页面。物理理读取和预读读读取所显示示的零说明要要为此查询检检索数据,没没有必要从磁磁盘中进行读读取。 备注 I/O 统计是专用用于运行的。当当查询在某次次运行中,所所有读取都会会从高速缓冲冲存储器中出出来,并作为为逻辑读取而而计数,而在在其它运行中中,完全一样样的查询有可可能需要使用用预读读取和和/或物理读读取以满足查查询的 I/O 要求。II/O 统计计的这种变化化可能由许多多因素造成的的,最常见的的就是其它连连接可能正在在执行查询并并将数据放入入高速缓冲存存储器(它取取代了被监视视查询正在使使用的数据页页)。当分析析查询时,在在打开 I/O 统计的的情况下数次次运行查询并并比较其结果果是很有帮助助的。 标为 Costt 的 Grraphiccal Shhowplaan 中标明明的百分数表表示在每个查查询的特定部部分上所花费费的时间所占占执行查询花花费的总时间间的百分数。 范围扫描:seelect * froom sapptest11 wherre coll2 = ''a'基于文本的 SShowPllan 输出出: |-Clussteredd Indeex Scaan(OBJJECT:(pubss.dbbo.ssaptesst1.sapt_c1), WHERRE:(ssaptesst1.col2='a') 等量图形显示计计划输出: 统计 I/O 的查询结果果集和数据库库 I/O (Querry Anaalyzerr): col1 cool2 cool3 fiiller 000 aa 100 abc 0000 a 200 aabc 0000 a 3300 abbc . . . 000 a 998800 abbc 0000 a 999900 aabc 0000 a 11000000 abc (10000 row(s) afffecteed) Taable ''sapteest1'.Scan countt 1, llogicaal reaads 45500, pphysiccal reeads 11, reaad-aheead reeads 44010. Showplaan 输出表表明查询处理理器需要执行行聚集索引 sapt_c1 的索索引扫描。索索引扫描的意意思是:SQQL Serrver 需需要读取 ssapt_cc1 B 树树结构(即表表的实际行)的的叶级的的部部分或全部以以便找到键值值 'a'。此此操作需要从从高速缓冲存存储器中读取取 4,5000 个 88K 的页。 预读读取的的数字 4,010 表表明 SQLL Servver 使用用 Readd-Aheaad Mannager 在 64 KB 组块块中读取了 4,0100 个 8 KB 页面面。预读读取取比物理读取取效率更高。物物理读取的数数字 1 表表明 SQLL Servver 需要要从磁盘中读读取一个 88 KB 页页面作为单一一 8 KBB 页面。由由于预读读取取和物理读取取都是物理磁磁盘读取,因因此它们比高高速缓冲存储储器的读取的的逻辑读取速速度慢得多。这这就是为什么么您的首要性性能优化的目目的应该是限限制物理磁盘盘读取,并尽尽量满足高速速缓冲存储器器的所有数据据库页读取。 索引更改建议索引设计的目的的是将 I/O 减到最最少以实现性性能最优。在在前面所示的的几个例子中中,出现了索索引扫描。与与索引扫描相相比,执行索索引搜索的效效率更高。要要想作到这一一点,将注意意力集中于查查询的 WHHERE 子子句是很重要要的。 在单行提取情况况下,coll3 就是正正在搜索的列列。由于 ccol3 有有极佳的可选选择性,因此此它是非聚集集索引的合适适候选项。对对 I/O 性能最好的的做法就是在在 col33 上定义非非聚集,使 col3 成成为唯一列或或索引中的第第一列。 在范围扫描的情情况下,cool2 就是是正在搜索的的列。Coll2 的选择择性还可以(1100,0000 行中带带有 'a'' 数值的有有 1,0000 行)。因因为需要所有有带 'a'' 的行,所所以 coll2 是聚集集索引的合适适候选项。 ALTER TTABLE 语句用于将将聚集主键更更改为非聚集集主键。 警告 在任何情情况下都不要要更改与表的的主键关联的的列。如果更更改可以保证证性能优势,可可以将聚集主主键更改为非非聚集主键,也也可以为同时时作为主键一一部分的列创创建新的非聚聚集索引,但但是在任何情情况下主键列列必须都保持持一致。记住住这一点极其其重要。 备注 在 SAAP R/33 环境中,建建议使用 SSE11 事事务定义非聚聚集、非主键键索引,以便便在 R/33 数据字典典中维护索引引信息。有关关使用 SEE11 事务务创建索引的的详细信息,请请参见 SAAP 联机帮帮助,其位于于 SE111 事务菜单单项 Hellp -> Extennded HHelp。单单击 Inddexes,然然后按照联机机指示执行。 执行索引更改 (Querry Anaalyzerr) 1. 在查询窗口键入入以下命令: alter ttable sapteest1 ddrop cconstrraint sapt_c1 allter ttable sapteest1 aadd coonstraaint ssapt_cc1 PRIIMARY KEY NNONCLUUSTEREED (cool1,cool2,cool3) ccreatee clussteredd indeex ckeey1 onn sapttest1(col2) creaate inndex nnkey1 on saaptestt1(coll3) 2. 按 CTRL + E 执执行命令。 第二组索引的结结果改进索引的单行行取数据:sselectt * frrom saaptestt1 wheere cool3 = 5000基于文本的 SShowPllan 输出出: |-Bookkmark Lookuup(BOOOKMARKK:(Bmmk10000), OOBJECTT:(puubs.dbo.sapttest1) WITTH PREEFETCHH) |-Indexx Seekk(OBJEECT:(pubs.dboo.saaptestt1.nnkey1), SEEEK:(sapteest1.col33=50000) ORRDEREDD) 等量图形显示计计划输出。 统计 I/O 的查询结果果集和数据库库 I/O (Querry Anaalyzerr): col1 cool2 cool3 fiiller 000 aa 50000 abc (1 roow(s) affeccted) Tablee 'sapptest11'.Scaan couunt 1, logiical rreads 5, phhysicaal reaads 0, readd-aheaad reaads 0. Showplaan 现在表表明 SQLL Servver 正在在对索引 nnkey1 使用索引搜搜索而不是索索引扫描。索索引搜索是指指:SQL Serveer 能够快快速浏览 nnkey1 B 树结构构(而不是象象前面例子中中的扫描索引引的叶级),并并使用书签查查找来找到与与键值 50000 关联联的数据行。这这一从索引扫扫描到索引搜搜索的改变对对 I/O 性能有极大大的影响。要要执行查询,仅仅需要 SQQL Serrver 数数据高速缓存存中的 5 个 I/OO,而前一个个例子中,需需要 2400 个。 改进索引的范围围扫描:seelect * froom sapptest11 wherre coll2 = ''a'基于文本的 SShowPllan 输出出: |-Clussteredd Indeex Seeek(OBJJECT:(pubss.dbbo.ssaptesst1.ckey11), SSEEK:(sapttest1.coll2='aa') ORRDEREDD) 等量图形显示计计划输出。 统计 I/O 的查询结果果集和数据库库 I/O (Querry Anaalyzerr): col1 cool2 cool3 fiiller 000 aa 100 abc 0000 a 200 aabc 0000 a 3300 abbc . . . 000 a 998800 abbc 0000 a 999900 aabc 0000 a 11000000 abc (10000 row(s) afffecteed) Taable ''sapteest1'.Scan countt 1, llogicaal reaads 488, phyysicall readds 0, read-aheadd readds 0. Showplaan 再次表表明 SQLL Servver 正在在对索引 cckey1 使用索引搜搜索而不是索索引扫描。在在聚集索引搜搜索情况下,不不需要进行书