WEB开发网
开发学院数据库MSSQL Server SQL Server使用索引实现数据访问优化 阅读

SQL Server使用索引实现数据访问优化

 2009-06-09 10:31:41 来源:WEB开发网   
核心提示: SELECTSalesDate,SalesPersonIDFROMSalesWHEREProductID=112首先让我们弄明白在数据库引擎怎么执行SQL语句的:1.Sales表有在ProductID列一个非聚焦索引,所以,SQL Server使用索引实现数据访问优化(6),首先查询非聚焦

SELECTSalesDate,SalesPersonIDFROMSalesWHEREProductID=112

首先让我们弄明白在数据库引擎怎么执行SQL语句的:

1.Sales表有在ProductID列一个非聚焦索引,所以,首先查询非聚焦索引树,发现包含ProductID=112的入口。

2.包含ProductID=112入口的索引页同样同样也包含了聚焦索引的值(所有的主健的值,即SalesID)

3.对于每一个主健(共400个),数据库引擎进入聚焦索引树来发现正确的行的位置

4.对于每一个主健,一旦发现正确的行的位置,数据库引擎会从匹配的行得到SalesDate和SalesPersonID的列的值。

请注意,在上述的步骤中,对于每一个ProductID=112的主键入口(共400个),数据库引擎必须搜索聚焦索引树400次,来检索附加的列(SalesDate,SalesPersonID)。

让我们猜想一下,如果非聚焦索引不但包含了聚焦索引的值(主健),同时还包含查询里标注的其他的2个列(SalesDate,SalesPersonID)的值,数据库引擎就不用执行上述的第3步和第4步,只须进入ProductID的列的非聚焦索引树,从索引页上读取3个列的值,这样运行的速度不是更快吗?

幸运的是,有一种办法来实施这种特点,这就是复合索引。你可以在表的列上创建复合索引,标明哪些列是和聚焦索引一起的应该附加存储的列。下面是一个在表Sales表的列ProductID创建复合索引的例子。

CREATEINDEXNCLIX_Sales_ProductID--Indexname
 

ONdbo.Sales(ProductID)--Columnonwhichindexistobecreated
INCLUDE(SalesDate,SalesPersonID)--Additionalcolumnvaluestoinclude

请注意,创建复合索引应当包含少数几个列,并且这些列经常在select查询里使用。在复合索引里包含太多的列不仅不会给你带来太多好处。而且由于使用相当多的内存来存储复合索引的列的值,其后果是内存溢出和性能降低。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:SQL Server 使用

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