0

我正在尝试简化场景,以便更好地阐明它。

可以说我有一张像这样的桌子;

create table documents
    (DocumentId uniqueidentifier primary key,
    --valid values are D=Draft,P=Published,R=Revised
    documentType char(1) not null,
    PublisherId,
    ....

我对此有一个简单的看法,它有谓词 DocumentType != 'D' 来过滤草稿。

并且我的大多数查询都针对此视图运行,例如 (.....) 中的 PublisherId 和 date > ... 等。

所以问题是我在这个表中有 500.000 条记录,它们都不是Draft类型。

无论如何,当我运行查询并获得实际计划时,SMS 告诉我 DocumentType、PublisherId 以及它希望我包含的 50 多个字段缺少索引。

我希望 SQL 查询优化器保留 DocumentType 字段的统计信息,并意识到没有 Draft 类型的文档,并且不检查该查询的该标志。我检查了统计数据

DBCC SHOW_STATISTICS ('Documents','DocumentType')

它有统计数据。在这种情况下,如何使 SQL 查询优化器跳过此字段的值检查并使用另一个索引。

顺便说一句,我使用的是 EntityFramework,所以我对 SQL 生成没有太多控制。MSSQL 版本是 2012。

编辑: 查看过滤索引

4

0 回答 0