sql过滤索引怎样提升查询性能?
发布时间:2022-04-26 09:33:17 所属栏目:系统 来源:互联网
导读:这篇文章主要介绍sql过滤索引的相关内容,本文简单的介绍了sql过滤索引提高查询性能的方法,感兴趣的朋友可以参考下面的示例,对大家学习sql过滤索有一定的帮助,接下来我们就一起来看看吧。 过滤索引,在查询条件上创建非聚集索引(1) 过滤索引是SQL 2008
这篇文章主要介绍sql过滤索引的相关内容,本文简单的介绍了sql过滤索引提高查询性能的方法,感兴趣的朋友可以参考下面的示例,对大家学习sql过滤索有一定的帮助,接下来我们就一起来看看吧。 过滤索引,在查询条件上创建非聚集索引(1) 过滤索引是SQL 2008的新特性,被应用在表中的部分行,所以利用过滤索引能够提高查询,相对于全表扫描它能减少索引维护和索引存储的代价。当我们在索引上应用WHERE条件时就是过滤索引。也就是满足如下格式: CREATE NONCLUSTERED INDEX <index name> ON <table> (<columns>) WHERE <criteria>; GO 上述我们已经说过此时未在查询条件上创建索引,所以此时必然走的是主键创建的聚集索引,接下来我们首先在UnitPrice列上创建非聚集索引来提高查询性能, CREATE NONCLUSTERED INDEX idx_SalesOrderDetail_UnitPrice ON Sales.SalesOrderDetail(UnitPrice) 此时我们再来比较二者查询开销 USE AdventureWorks2012 GO DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS SELECT SalesOrderDetailID, UnitPrice FROM AdventureWorks2012.Sales.SalesOrderDetail WITH(INDEX([PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID])) WHERE UnitPrice > 2000 GO SELECT SalesOrderDetailID, UnitPrice FROM Sales.SalesOrderDetail WITH(INDEX([idx_SalesOrderDetail_UnitPrice])) WHERE UnitPrice > 2000 此时在查询条件上建立了非聚集索引之后,查询开销提升的非常明显,提升达到了90%以上,因为非聚集索引也会引用了主键创建的聚集索引,所以这个时候不会导致Bookmark Lookup或者Key Lookup查找。 (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |