通常我们会遇到这样的情况,一张表中包含上百万条的数据,但是每次我们只查询一小部分的数据。
比如一列只有少部分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
分享到:
相关推荐
* Filtered Index 可以提高查询性能:使用 Filtered Index 来提高查询性能。 * 尽量不用临时表:避免使用临时表,以免引起性能下降。 * 及时检查 global 变量@@ERROR:使用 global 变量@@ERROR 来检查错误。 四、...
5. **模型优化**:如果模型在验证集上的表现不佳,可以尝试调整超参数、改变网络结构或采用集成学习等方法提高性能。 6. **模型测试**:最终,将训练好的模型应用到未见过的数据上,验证其实际应用效果。 总的来说...
- 适当引入冗余数据以提高查询效率。 - **主从架构**: - 实现读写分离,减轻主数据库的压力。 - **故障转移处理**: - 快速切换到备用服务器。 - **缓存方案**: - 缓存查询结果以减少数据库访问次数。 - 采用...
开发人员和研究人员可以使用这些工具来理解和优化滤波反投影算法,例如,通过调整滤波器参数来探索其对重建图像质量的影响,或者通过并行计算技术加速重建过程。 这个项目的代码库可能包含以下组件: - 数据读取...
此时,我们可以考虑对`order_date`列创建索引,或者修改查询条件,以提高查询效率。 #### 四、结语 通过本文的学习,你已经掌握了如何使用MySQL中的`EXPLAIN`工具来分析和优化查询性能。理解查询的执行计划是优化...
在ROS中,"filtered"一词通常表示数据经过了某种形式的预处理或过滤,这可能是为了减少噪声、提高精度或降低数据量,以便更有效地分析和处理。 标签“bag”进一步确认了这是一个ROS Bag文件,这些文件可以包含多种...
1. **使用索引**:确保被JOIN的字段上有适当的索引,可以极大地提高查询效率。 2. **避免使用SELECT ***:尽可能指定需要查询的字段名,而不是使用`SELECT *`。这样可以减少不必要的数据传输,提升查询性能。 3. **...
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 ...
它可能与流行的前端数据表格库如DataTables.js结合使用,提供了服务器端的过滤、排序和分页功能,提高了用户体验,同时减轻了前端的计算压力。 **功能特性** 1. **服务器端过滤**:django-filtered-datatables允许...
Mysql Explain 详解与索引最佳实践 Mysql Explain 是 Mysql 中一个非常重要的工具,可以帮助我们分析和优化 SQL 查询语句。...在日常开发中,我们可以使用 Explain 工具来优化数据库性能,提高查询速度。
1. **数据预处理**:`Filtered Associator`使用过滤器对原始数据进行清洗和转换。它允许用户选择不同的过滤器来处理数据,如`RemoveUseless`可以移除无用的属性,`Normalize`可以进行特征归一化,以确保数据在不同...
例如,在以下的查询语句中,我们可以使用索引优化来提高查询性能: ```sql CREATE INDEX idx_sid ON score (sid); SELECT * FROM score WHERE sid = 1; ``` MySQL SQL 执行计划分析与优化方案是数据库性能优化的...
它使用 Apache Batik 进行 SVG 渲染。 有适用于 Windows 和 Mac OSX 的安装程序,以及适用于其他平台的 Java JAR 包。 Filtered 是针对 SVG 过滤器的可视化编辑,不提供一般的矢量绘图功能。 它旨在用作矢量编辑包...
- 在进行多表连接查询时,应尽量使用合适的索引,以避免全表扫描和减少join_buffer的使用,这样可以提高查询效率。 - 通过分析执行计划中的rows和filtered列,可以评估where条件的有效性,如果filtered列的值较低...
13. **FM - GET_DATA**: 获取特定表的完整或部分数据,可以设置缓存策略以提高性能。 14. **FM - READ_TABLE**: 简单读取表数据,不涉及复杂的查询逻辑。 15. **FM - UPDATE_TABLE**: 与READ_TABLE类似,但用于...
Filtered_Gaussian_output.m
2. **覆盖索引**:当查询只需要索引中的列时,使用覆盖索引可以避免回表,提高性能。 3. **避免全表扫描**:尽量让MySQL能够利用索引来定位数据,减少`type`列中`all`的出现。 4. **考虑查询语句的顺序**:优化器...
LINQ(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本引入的一项功能,它允许开发人员使用相同的语法进行数据库、集合、XML以及其他数据源的查询,提高了代码的可读性和维护性。...
filtered_feature_bc_matrix.h5