[学习笔记]——索引的应用技巧和注意事项

1、创建包含列的非聚集索引

 

1 select*fromDimEmployee;
2 CREATENONCLUSTEREDINDEXcustomernameONDimCustomer
3 (CustomerAlternateKeyASC)
4 INCLUDE(LastName
5 ,FirstName)

 

例如创建一个客户的名字非聚集索引

1 CREATENONCLUSTEREDINDEXnameONDimCustomer
2 (LastNameASC
3 ,FirstNameASC)//①查询姓名的开销(代码)
4 Selectc.*fromDimCustomerasc
5 wherec.FirstName='Jon'andc.LastName='Yang'

 1 //②查询姓的开销(代码)

2 Selectc.*fromDimCustomerasc

3 wherec.LastName='Yang' 

 实际开销结果如下:

 1 //③查询名的开销(代码)

2 Selectc.*fromDimCustomerasc

3 wherec.FirstName='Jon' 

对比三面的三个开销结果,可以看得出来建立索引的查询是有先来后到的,索引的查询要包含前面的N列才能获益

因此进行优化的结果应该是分别创建两个索引,一个代表姓,一个代表名。

 

1 CREATENONCLUSTEREDINDEXFnameONDimCustomer(
2 FirstNameASC)//创建姓的非聚集索引
3 CREATENONCLUSTEREDINDEXLnameONDimCustomer(
4 LastNameASC)//创建名的非聚集索引

 

2为一张表建立主键

1 ALTERTABLEDimProduct

2 ADO

3 COMSTRAINT

4 pk_DimProduct_ProductKey

5 PRIMARY (ProductKey); 

 

查询产品英文名为Jam的产品信息

 1 selectP.*fromDimProductASP

2 whereLEFT(P.EnglishProductName,4)='Thin' 

 

3、

1 SELECT        
2             O.SalesOrderNumber
3             ,O.SalesOrderDetailID
4         FROM    
5             tb_Customer2ASC
6             JOINtb_Order2ASOONC.ID=O.CustomerID
7         WHERE    
8             C.City='Chicago';//合并循环
9     C.City='Paris';//嵌套循环

4、索引的更新以及删除都会产生内部碎片,这样的碎片往往难以填充,新的索引大小要是大有碎片的大小,就会导致索引拆分页

外部的碎片主要由两种,一种是逻辑顺序和物理顺序不一致,还有一种是索引页不连续

例如:

1 SELECTTOP 45        
2                 O.*
3             FROM    
4                 DimProductASO
5             WHERE    
6                 O.ProductKey%2=1;

 

1 DBCCIND            
2         ('AdventureWorksDW2008R2'        
3         ,'DimProduct'        
4         ,1);    

结果

 

posted @ 2017-12-04 22:10  我是墩儿  阅读(438)  评论(0编辑  收藏  举报