FROM Sales.Orders WITH(INDEX(idx_all_cover))
WHERE shipcity = '深圳'
GO
SELECT orderid, shipaddress, shipcity, shipregion
FROM Sales.Orders WITH(INDEX(ix_noncls_include))
WHERE shipcity = '深圳'
GO

我们从上所知,二者开销一样,并未有什么区别,当然相信我们更倾向于的是将第二种方式作为解决方案。到这里算是基本结束了,但是还有一个小问题,我们在之前已经创建了orderid的聚集索引,后面在解决方案中我们也添加了orderid的非聚集索引,难道非得添加吗,我们去掉试试看。
CREATE NONCLUSTERED INDEX idx_noncls_cover_exceptorderid
ON Sales.Orders(shipcity,shipaddress,shipregion)
CREATE NONCLUSTERED INDEX idx_noncls_include_exceptorderid
ON Sales.Orders(shipcity) INCLUDE(shipaddress,shipregion)去除orderid比较二者开销差异:
USE TSQL2012
GO
SELECT orderid, shipaddress, shipregion
FROM Sales.Orders WITH(INDEX([idx_noncls_cover_exceptorderid]))
WHERE shipaddress = '深圳'
GO
SELECT orderid, shipaddress, shipregion
FROM Sales.Orders WITH(INDEX([idx_noncls_include_exceptorderid]))
WHERE shipaddress = '深圳'
GO
由上知,非聚集索引列不需要包含创建了聚集索引的列,那么事实到底是怎样的呢?
结论:其实对于任何非聚集索引列都不需要包含创建了聚集索引的列,因为创建聚集索引的列是非聚集索引集合列的一部分,也就是说只要一个表上的列创建了聚集索引,那么非聚集索引集合列就包含了这个聚集索引。
总结
本节我们比较详细就问题的抛出到问题的解决,从而来提高查询性能,好了,到此结束,我们下节再会。简短的内容,深入的理解
您可能感兴趣的文章:SQL Server 2005通用分页存储过程及多表联接应用SQL设置SQL Server最大连接数及查询语句详解SQL Server的聚焦过滤索引浅述SQL Server的聚焦强制索引查询条件和Columnstore Index浅析SQL Server的分页方式 ISNULL与COALESCE性能比较详解SQL Server中的数据类型浅析SQL Server的聚焦使用索引和查询执行计划浅析SQL Server 聚焦索引对非聚集索引的影响如何快速删掉SQL Server登录时登录名下拉列表框中的选项浅谈SQL Server交叉联接 内部联接










