filter indexs
筛选索引--filter indexs 筛选索引是一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。筛选索引使用筛选谓词对表中的部分行进行索引。 一:筛选索引与全表索引相比具有以下 优点 : 1.提高了查询性能和计划质量 设计良好的筛
筛选索引--filter indexs
筛选索引是一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。筛选索引使用筛选谓词对表中的部分行进行索引。
一:筛选索引与全表索引相比具有以下优点:
1.提高了查询性能和计划质量
设计良好的筛选索引可以提高查询性能和执行计划质量,因为它比全表非聚集索引小并且具有经过筛选的统计信息。与全表统计信息相比,经过筛选的统计信息更加准确,因为它们只涵盖筛选索引中的行。
2.减少了索引维护开销
仅在数据操作语言 (DML)
语句对索引中的数据产生影响时,才对索引进行维护。与全表非聚集索引相比,筛选索引减少了索引维护开销,因为它更小并且仅在对索引中的数据产生影响时才进行维护。筛选索引的数量可以非常多,特别是在其中包含很少受影响的数据时。同样,如果筛选索引只包含频繁受影响的数据,则索引大小较小时可以减少更新统计信息的开销。
3.减少了索引存储开销
在没必要创建全表索引时,创建筛选索引可以减少非聚集索引的磁盘存储开销。可以使用多个筛选索引替换一个全表非聚集索引而不会明显增加存储需要。
4.设计注意事项
为了设计有效的筛选索引,必须了解应用程序使用哪些查询以及这些查询与您的数据子集有何关联。例如,所含值中大部分为 NULL
的列、含异类类别的值的列以及含不同范围的值的列都属于具有定义完善的子集的数据。以下设计注意事项提供了筛选索引优于全表索引的各种情况。
5.数据子集的筛选索引
在列中只有少量相关值需要查询时,可以针对值的子集创建筛选索引。例如,当列中的值大部分为 NULL 并且查询只从非 NULL
值中进行选择时,可以为非 NULL 数据行创建筛选索引。由此得到的索引与对相同键列定义的全表非聚集索引相比,前者更小且维护开销更低。
eg1:例如,AdventureWorks 数据库中有一个包含 2679 行的 Production.BillOfMaterials 表。EndDate 列只有 199 行包含非 NULL 值,其余 2480 行均包含 NULL。下面的筛选索引将涵盖这样的查询:返回在此索引中定义的列的查询,以及只选择 EndDate 值不为 NULL 的行的查询。
USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM
sys.indexes
WHERE name =
N'FIBillOfMaterialsWithEndDate'
AND object_id =
OBJECT_ID (N'Production.BillOfMaterials'))
DROP INDEX
FIBillOfMaterialsWithEndDate
ON
Production.BillOfMaterials
GO
CREATE NONCLUSTERED INDEX
FIBillOfMaterialsWithEndDate
ON
Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT
NULL;
GO
筛选索引 FIBillOfMaterialsWithEndDate
对下面的查询有效。您可以显示查询执行计划,以确定查询优化器是否使用了此筛选索引。有关如何显示查询执行计划的信息,请参阅分析查询。
SELECT ProductAssemblyID, ComponentID, StartDate
FROM
Production.BillOfMaterials
WHERE EndDate IS NOT
NULL;
GO有关如何创建筛选索引以及如何定义筛选索引谓词表达式的详细信息,请参阅 CREATE INDEX (Transact-SQL)。
6.异类数据的筛选索引
表中含有异类数据行时,可以为一种或多种类别的数据创建筛选索引。
eg2:例如,香港虚拟主机,Production.Product 表中列出的每种产品均分配到一个 ProductSubcategoryID,后者又与 Bikes、Components、Clothing 或 Accessories 产品类别关联。这些类别为异类类别,因为它们在 Production.Product 表中的列值并不是紧密相关的。例如,对于每种产品类别,Color、ReorderPoint、ListPrice、Weight、Class 和 Style. 均具有唯一特征。假设会经常查询具有子类别 27-36 的 Accessories。通过对 Accessories 子类别创建筛选索引,可以提高对 Accessories 的查询的性能。
下面的示例对 Production.Product 表中 Accessories 子类别中的所有产品创建一个筛选索引。
USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM
sys.indexes
WHERE name =
N'FIProductAccessories'
AND object_id = OBJECT_ID
('Production.Product'))
DROP INDEX FIProductAccessories
ON Production.Product;
GO
CREATE NONCLUSTERED INDEX
FIProductAccessories
ON Production.Product (Name,
ListPrice)
WHERE ProductSubcategoryID >= 27 AND ProductSubcategoryID GO
筛选索引 FIProductAccessories 对下面的查询有效,因为查询谓词等效于筛选索引表达式。
SELECT Name, ListPrice
FROM Production.Product
WHERE
ProductSubcategoryID BETWEEN 27 AND
36;
GO
7.视图与筛选索引
视图是存储查询定义的虚拟表;与筛选索引相比,其用途更广,功能更强。有关视图的详细信息,请参阅了解视图和使用视图的情况。下表比较了在视图和筛选索引中可以使用的部分功能。
在表达式中允许 视图 筛选的索引
计算列 是 否
联接 是 否
多个表 是 否
谓词中的简单比较逻辑 是 是

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)
![解决'[Vue warn]: Failed to resolve filter”错误的方法](https://img.php.cn/upload/article/000/887/227/169243040583797.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
解决“[Vuewarn]:Failedtoresolvefilter”错误的方法在使用Vue进行开发的过程中,我们有时候会遇到一个错误提示:“[Vuewarn]:Failedtoresolvefilter”。这个错误提示通常出现在我们在模板中使用了一个未定义的过滤器的情况下。本文将介绍如何解决这个错误并给出相应的代码示例。当我们在Vue的

1、filter先看下web服务器的filter所处的位置。filter是一个前后连接的链,前面处理完成之后传递给下一个filter处理。1.1filter的接口定义publicinterfaceFilter{//初始化方法,整个生命周期中只执行一次。//在init方法成功(失败如抛异常等)执行完前,不能提供过滤服务。//参数FilterConfig用于获取初始化参数publicvoidinit(FilterConfigfilterConfig)throwsServletException;//

说明1、如果Lambda参数生成true值,则filter(能够生成boolean结果的Lambda)将生成元素;2、生成false时,就不再使用此元素。实例创建一个List集合:ListstringCollection=newArrayList();stringCollection.add("ddd2");stringCollection.add("aaa2");stringCollection.add("bbb1");stringC

CSS模糊属性详解:filter和backdrop-filter导语:在设计网页时,我们常常需要一些特效来增加页面的视觉吸引力。而模糊效果是其中一种常见的特效之一。CSS提供了两种模糊属性:filter和backdrop-filter,它们分别用于对元素内容以及背景内容进行模糊处理。本文将详细介绍这两个属性,并提供一些具体的代码示例。一、filt

Java8中的Optional类:如何使用filter()方法过滤可能为空的值在Java8中,Optional类是一个非常有用的工具,它允许我们更好地处理可能为空的值,避免了NullPointerException的发生。Optional类提供了许多方法来操作潜在的空值,其中一个重要的方法是filter()。filter()方法的作用是,如果Option

CSS视觉属性解析:box-shadow,text-shadow和filter引言:在网页设计和开发中,使用CSS可以为元素添加各种视觉效果。本文将重点介绍CSS中的box-shadow,text-shadow和filter这三个重要属性,包括其使用方法和效果展示。下面我们分别详细解析这三个属性。一、box-shadow(盒子阴影)box-shado

Vue中利用filter对数据进行格式化和处理在Vue中,我们可以通过使用filter来对数据进行格式化和处理。Filter是一种可以在模板中直接调用的函数,它可以对要显示的数据进行处理并返回处理后的结果。在本文中,我们将介绍如何使用filter来格式化和处理数据,并提供具体的代码示例。注册filter在Vue实例中,我们需要先注册一个filter,以便在模

首先定义一个统一访问URL拦截的Filter。代码如下:publicclassUrlFilterimplementsFilter{privateLoggerlog=LoggerFactory.getLogger(UrlFilter.class);@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{H
