通常我们会遇到这样的情况,一张表中包含上百万条的数据,但是每次我们只查询一小部分的数据。
比如一列只有少部分NULL值,每次我们都需要将Null值找出来进行处理。或者我们有状态标志位,需要取Flag对数据处理。 由于数据大部分是重复的,所以对于整个列做索引代价是非常大的,而且对查询性能提升可能不大。
庆幸的是微软提供了Filtered index。Filtered index引使用筛选谓词对表中的部分行进行索引,与全表索引相比,设计良好的筛选索引可以提高查询性能、减少索引维护开销并可降低索引存储开销。
下面是我做的一个测试:
CREATE TABLE [dbo].[test](
[test1] [varchar](100) NULL,
[test2] [varchar](100) NULL,
[test3] [varchar](100) NULL,
[test4] [varchar](100) NULL,
[test5] [varchar](100) NULL,
[flag] [char](1) NULL
) ON [PRIMARY]
flag列只有N和Y两个值。然后插入100W数据,Flag为N,插入5000条Flag为Y,然后对表进行查询:
select flag from test where flag ='Y'---用了7秒钟返回数据
查看执行计划提示缺失索引,建议的创建脚本如下:
CREATE NONCLUSTERED INDEX [ix_filter_flag]
ON [dbo].[test] ([flag])
因为我们只针对于Flag为Y的数据查询,如果使用建议脚本创建索引对性能不会有大的提升而且会增加数据库的负担。 所以我选择用Flitered index:
CREATE NONCLUSTERED INDEX [ix_filter_flag]
ON [dbo].[test] ([flag])
WHERE flag='Y' ;
创建完成后运行上面的语句,发现使用了Index seek,时间不超过一秒中就返回了所有结果。
但是如果想查询Flag为N的,仍然是Table Scan:
当然我们可能还需要查询其他的字段,创建索引的时候还可以配合Include使用。
使用Filtered index还有一些限制,更多信息可以参考MSDN:http://technet.microsoft.com/en-us/library/cc280372.aspx
分享到:
相关推荐
This is code for The Filtered Backprojection Algorithm(FBP), which is the result for 'radon' and 'iradon' about three images. Image1(FBP1) is a matrix, , image2(FBP2) is a CT of head, image3(FBP3) is ...
摘自Kaggle上的“狗vs猫”数据集25000张图片中的3000张图片,包含训练集2000张(猫狗各一千)、验证集1000张(猫狗各五百)
实验室代码,可用。CT图像重建的滤波反投影算法程序设计
双边滤波处理后的深度图(图像大小640*480,深度值范围0~2.226)生成的txt文件
它使用 Apache Batik 进行 SVG 渲染。 有适用于 Windows 和 Mac OSX 的安装程序,以及适用于其他平台的 Java JAR 包。 Filtered 是针对 SVG 过滤器的可视化编辑,不提供一般的矢量绘图功能。 它旨在用作矢量编辑包...
Filtered_Gaussian_output.m
filtered_feature_bc_matrix.h5
移动网络是一种无线技术,可以通过无线传输提供语音和/或...在过去,电路交换被用来通过网络传输语音,然后我们继续使用两种电路交换以及语音和数据的分组交换,现在我们只使用分组交换,这是如何频谱已从1G扩展到4G
This is multiple filtered Grid Layout sample
hdl_501 example bag.hdl_501 example bag.hdl_501 example bag.
FxLMS - Filtered X - LMS for ANC systems (offline initiation)
F-OFDM仿真代码,参数配置同lte帧结构
资源来自pypi官网。 资源全名:django-filtered-datatables-0.0.16.tar.gz
V1_Mouse_Brain_Sagittal_Posterior_filtered_feature_bc_matrix.h5
无线通信系统-HW2-瑞利衰落信道模拟器
Neural Network-Based Adaptive Command Filtered Position Tracking Control for Induction Motors
Finite-time command filtered backstepping control for a class of nonlinear systems
语言:English (United States) 网路由您信任的人筛选 ...在Filtered.by网站上,查看您信任的人每天在其信任的主题中精选的最佳链接的提要。注册我们的等待列表,成为第一个加入您的朋友。 Filtered.by需要邀请。