WEB开发网
开发学院数据库MSSQL Server SQL Server数据库优化措施:索引优化 阅读

SQL Server数据库优化措施:索引优化

 2010-05-27 00:00:00 来源:WEB开发网   
核心提示: 可以用下面的sql做实验:01USE[Test]02GO03/**对象:Table[dbo].[testIndexOrder]脚本日期:05/27/201009:11:26**/04SETANSI_NULLSON05GO06SETQUOTED_IDENTIFIERON07GO08CREATETA

可以用下面的sql做实验:

  01 USE [Test]
  02 GO
  03 /****** 对象: Table [dbo].[testIndexOrder] 脚本日期: 05/27/2010 09:11:26 ******/
  04 SET ANSI_NULLS ON
  05 GO
  06 SET QUOTED_IDENTIFIER ON
  07 GO
  08 CREATE TABLE [dbo].[testIndexOrder](
  09 [ID] [int] IDENTITY(1,1) NOT NULL,
  10 [FirstName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
  11 [LastName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
  12 [Desc] [nvarchar](400) COLLATE Chinese_PRC_CI_AS NULL,
  13 CONSTRAINT [PK_testIndexOrder] PRIMARY KEY CLUSTERED
  14 (
  15 [ID] ASC
  16 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
  17 ) ON [PRIMARY]
  18 GO
  19 /****** 对象: Index [IX_testIndexOrder] 脚本日期: 05/27/2010 09:11:51 ******/
  20 CREATE NONCLUSTERED INDEX [IX_testIndexOrder] ON [dbo].[testIndexOrder]
  21 (
  22 [FirstName] ASC,
  23 [LastName] ASC
  24 )WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
  25 GO
  26 declare @i INT;
  27 DECLARE @random varchar(36);
  28 set @i = 0;
  29 while @i < 100000
  30 begin
  31 set @random = newid();
  32
  33 INSERT INTO [testIndexOrder]
  34 (FirstName,LastName,[Desc])
  35 VALUES(
  36 substring(@random,1,8),substring(@random,12,8),@random
  37 );
  38 set @i = @i + 1
  39 end
  40
  41
  42 set statistics time on
  43 select * from [testIndexOrder] where lastname = '6F-4ECA-'
  44 select * from [testIndexOrder] where firstname = 'CAABE009'
  45 set statistics time off

4)索引的个数问题

索引提高查询效率是以降低更新、插入、删除的速度为代价的。每当索引列发生变化时都需要对索引数据进行相应的调整。所以一个表上不可以建太多的索引,除非你完全不在乎修改数据的效率。另外sql server本身会对索引的数量和索引的数据长度有限制,具体请参考

5)在必要时重建索引

Sql server运行一段时间之后就会形成一些索引碎片,这时候就需要重建索引了,有时候重建索引可以起到意想不到的效果。

查看索引碎片,重建索引,可以通过sql server管理器来重建;也可以通过下面的sql语句来实现:

      1 --显示表testIndexOrder的索引碎片情况
  2 DBCC SHOWCONTIG(testIndexOrder)
  3
  4 --重建表的索引
  5 --第一个参数,可以是表名,也可以是表ID。
  6 --第二个参数,如果是'',表示影响该表的所有索引。
  7 --第三个参数,填充因子,即索引页的数据填充程度。如果是,表示每一个索引页都全部填满,此时select效率最高,但以后要插入索引时,就得移动后面的所有页,效率很低。如果是,表示使用先前的填充因子值。
  8 DBCC DBREINDEX(testIndexOrder,'',)

数据库优化是一门复杂的学问,需要不断的学习实践,积累经验。

上一页  1 2 

Tags:SQL Server 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接