管理索引

本文介绍SQL Server 2005中的索引新特性,包括在线索引操作、并行索引操作、锁定选项等,并探讨了分区的发展历史及其在SQL Server 2005中的应用。

管理索引

索引新特性: ALTER INDEX statement  Online index operations  Parallel index operations  Locking options  Indexes with included columns  Partitioned indexes  XML indexes

索引新特性-MAXDOP-->MAXDOP(degree of parallelism): 设置查询处理器执行单个索引语句可以使用的最大处理器数。根据当前系统的工作负荷,可以使用较少的处理器。 并行索引操作只适用于SQL Server 2005 Enterprise Edition  MAXDOP索引选项只为指定此选项的查询覆盖max degree of parallelism配置选项

                    并行索引执行和MAXDOP索引选项适用于下列Transact-SQL语句: CREATE INDEX  ALTER INDEX REBUILD  DROP INDEX(只适用于聚集索引。)  ALTER TABLE ADD(索引)CONSTRAINT  ALTER TABLE DROP(聚集索引)CONSTRAINT

                    设置max degree of parallelism选项-->见下列语句:
                    sp_configure 'show advanced options',1;
                    GO
                    RECONFIGURE WITH OVERRIDE;
                    GO
                    sp_configure 'max degree of parallelism',8;
                    GO
                    RECONFIGURE WITH OVERRIDE;
                    GO

                   设置MAXDOP-->见下列语句:

                    CREATE INDEX IX_ProductVendor_VendorID
                    ON Purchasing.ProductVendor(VendorID)
                    WITH(MAXDOP=4);
                    GO

索引新特性-联机执行索引-->在SQL Server 2005中,可以联机创建、重新生成或删除索引  联机索引操作只适用于SQL Server 2005 Enterprise Edition  建议对于全天候运行的业务环境执行联机索引操作

                          USE AdventureWorks;
                          GO
                          ALTER INDEX ALL ON Production.Product
                          REBUILD WITH(ONLINE=ON)  -->见下图:

                              20032141

索引新特性-联机执行索引最佳实践-->当基础表包含大型对象(LOB)数据类型(image、ntext、text、varchar(max)、nvarchar(max)、varbinary(max)和xml)时,必须在脱机状态下创建、重新生成或删除聚集索引  当表包含LOB数据类型时,可以联机创建非聚集索引,但是LOB数据类型列均不能在索引定义中用作键列或非键列。使用LOB数据类型列定义的非聚集索引必须脱机创建或重新生成  无法为本地临时表联机创建、重新生成或删除索引。全局临时表的索引则没有此限制

索引新特性-联机执行索引性能-->无论并发更新活动的级别如何,联机索引操作都将比相应的脱机索引操作更慢  在索引操作过程中性能降低和使用较多的资源  权衡利弊  使用MAXDOP索引选项

索引新特性-索引的锁定-->如果ALLOW_ROW_LOCKS=ON并且ALLOW_PAGE_LOCK=ON,则当访问索引时将允许行、页和表级别的锁。数据库引擎将选择相应的锁,并且可以将锁从行锁或页锁升级到表锁。如果ALLOW_ROW_LOCKS=OFF并且ALLOW_PAGE_LOCK=OFF,则当访问索引时只允许表级锁。ALLOW_PAGE_LOCKS设置为OFF时,无法重新组织索引。ALLOW_ROW_LOCKS={ON|OFF}: 指定是否允许行锁。默认值为ON。ON在访问索引时允许行锁。数据库引擎确定何时使用行锁。OFF未使用行锁。 ALLOW_PAGE_LOCKS={ON|OFF}: 指定是否允许页锁。默认值为ON。ON访问索引时允许使用页锁。数据库引擎确定何时使用页锁。OFF未使用页锁。

索引新特性-分区索引-->什么是分区? 为什么要使用分区? 为了改善大型表的可伸缩性和可管理性。 分区可以带来什么帮助? 当表和索引变得非常大时,分区可以将数据分为更小、更容易管理的部分,从而提高性能。如果具有多个CPU的系统中存在一个大型表,则对该表进行分区可以通过并行操作获得更好的性能。

分区的发展历史-->对SQL Server 7.0之前的版本中的对象进行分区: 在SQL Server 6.5及以前的版本中,分区只能通过设计来完成,还必须内置到所有数据访问编码和查询方法中,性能并没有太大的改善。 SQL Server 7.0中的分区视图: 在SQL Server 7.0版本中,视图结合了约束,允许查询优化程序从查询计划中删除不相关的表(即分区消除),大大降低了联合视图访问多个表时的总计划成本。

SQL Server7.0中的分区视图-->见下图:

                             20032142

使用以下查询访问YearlySales视图的用户只会被引导至SalesJanuary2003表: SELECT ys.* FROM dbo.YearlySales AS ys
                                                                                             WHERE ys.SalesDate = '20030113'
SQL Server 2000中的分区视图: 尽管SQL Server 7.0大大简化了设计并改善了SELECT语句的性能,但是并没有为数据修改语句带来任何好处,还得访问基础表。 SQL Server 2000中的分区视图: 在SQL Server 2000中,数据修改语句还可以受益于SQL Server 7.0中引入的分区视图功能。由于数据修改语句可以使用相同的分区视图结构,因此,SQL Server可以通过视图将修改定向到相应的基础表。允许在多个服务器之间分布这些视图,并直接通过视图更新数据库表

分区的发展历史--SQL Server 2000中的分区视图: SQL Server 2000区分本地分区视图和分布式分区视图。在本地分区视图中,所有的参与表和视图驻留在同一个SQL Server实例上。在分布式分区视图中,至少有一个参与表驻留在不同的(远程)服务器上。创建的基本步骤: 1.在实现分区视图之前,必须先水平分区表。原始表被分成若干个较小的成员表。每个成员表包含与原始表相同数量的列。2.成员表设计好后,每个表基于键值的范围存储原始表的一块水平区域。键值范围基于分区列中的数据值。每一成员表中的值范围通过分区列上的CHECK约束强制,并且范围之间不能重叠。3.在创建成员表后,在服务器上定义一个分区视图。

SQL Server 2005的分区功能增强: SQL Server 2000中并没有简化分区的管理、设计。而且分区数目增加,会使得查询优化时间上升  SQL Server 2005中的分区表: SQL 2005提供了在数据库的文件组之间表分区的功能,水平分区允许把表按分区scheme分为多个小的组。表分区用于非常大的,从几百GB到TB、甚至更大数据库。 通过SQL 2005中的分区表,可以对表进行设计(使用函数和架构),从而将具有相同分区键的所有行都直接放置到(且总是转到)特定的位置。函数用于定义分区边界以及放置第一个值的分区。在使用LEFT分区函数时,第一个值将作为第一个分区中的上边界。在使用RIGHT分区函数时,第一个值将作为第二个分区的下边界。定义函数后即可创建分区架构,分区架构可以将对象映射到一个或多个文件组。为了确定数据的相应物理位置,分区架构将使用了分区函数。根据分区架构创建表。

如何分区一张表? Create the partition function-->Create partition function emailPF(nvarchar(50))as range right for values('G','N')  Create the partition scheme-->Create partition scheme emailPS as partition emailPF to (fg1,fg2,fg3)  Create the partitioned table-->Create table customermail(custid int,email nvarchar(30)on emailPS(email)

索引的增强: 高可用性: Online Index Operations-->联机创建、重建或删除索引的功能是SQL Server 2005的一个增强功能。 易管理性: Index Enhancements-->Rebuild of a Clustered index no longer causes related Noclustered Indexes to be rebuilt  Index with Included Columns一索引覆盖查询  Disabled Indexes

How to Create an Index-->CREATE INDEX statement options: Permitting online operations  Specifying the degree of parallelism  Specifying locking options  Adding included columns  Partitioning indexes  Creating XML indexes 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值