CREATE NONCLUSTERED INDEX idx_SalesOrderDetail_ProductID
ON Sales.SalesOrderDetail (ProductID)
WHERE ProductID = 870利用变量来和查询条件比较,强制使用过滤索引(默认情况下走聚集索引)
USE AdventureWorks2012
GO
DECLARE @ProductID INT
SET @ProductID = 870
SELECT ProductID
FROM Sales.SalesOrderDetail WITH(INDEX([idx_SalesOrderDetail_ProductID]))
WHERE ProductID = @ProductID
查看查询执行计划结果却出错了,此时我们需要添加OPTION重新编译,如下:
USE AdventureWorks2012
GO
DECLARE @ProductID INT
SET @ProductID = 870
SELECT ProductID
FROM Sales.SalesOrderDetail
WHERE ProductID = @ProductID
OPTION(RECOMPILE)
上述利用变量来查询最后通过OPTION重新编译在SQL Server 2012中测试好使,至于其他版本未知,参考资料【The Pains of Filtered Indexes】。
总结
本节我们学习了通过过滤索引来提高查询性能,同时也给出了其不同的场景以及其使用优点和明显的缺点。简短的内容,深入的理解,我们下节再会,good night。
您可能感兴趣的文章:SQL Server 2005通用分页存储过程及多表联接应用SQL设置SQL Server最大连接数及查询语句解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)浅述SQL Server的聚焦强制索引查询条件和Columnstore Index浅析SQL Server的分页方式 ISNULL与COALESCE性能比较详解SQL Server中的数据类型浅析SQL Server的聚焦使用索引和查询执行计划浅析SQL Server 聚焦索引对非聚集索引的影响如何快速删掉SQL Server登录时登录名下拉列表框中的选项浅谈SQL Server交叉联接 内部联接










