加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

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查找。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读