什么是假设指数?

时间:2008-09-29 15:34:36

标签: sql-server indexing

有人知道在sql server 2000中使用了什么假设索引吗?我有一个包含15个以上索引的表,但不知道它们是为什么创建的。他们可以减慢删除/插入吗?

5 个答案:

答案 0 :(得分:3)

假设索引通常在您运行索引调整向导时创建,并且是建议,在正常情况下,如果向导运行正常,它们将被删除。

如果遗留一些问题,可能会导致一些问题,请参阅this link for ways to remove them

答案 1 :(得分:1)

不确定2000年,但在2005年,假设索引和数据库对象通常是 DTA(数据库调优顾问)

创建的对象

您可以通过运行此查询来检查索引是否是假设:

SELECT  *
FROM    sys.indexes
WHERE   is_hypothetical = 1

如果您已经为调优顾问提供了基于其索引策略的良好信息,那么我会说它通常会信任其结果,但是如果你当然应该检查它是如何在盲目信任它之前分配它们的。每种情况都会有所不同。

答案 2 :(得分:1)

谷歌搜索“sql server假设索引”返回following article作为第一个结果。引用:

  

假设索引和数据库对象通常只是由DTA(数据库调优顾问)创建的对象

答案 3 :(得分:0)

假设索引是由Database Tuning Advisor生成的索引。一般来说,索引太多并不是一个好主意,你应该检查你的查询计划,以修剪那些没有使用的索引。

答案 4 :(得分:0)

来自sys.indexes

is_hypothetical     bit     

1 = Index is hypothetical and cannot be used directly as a data access path. 
    Hypothetical indexes hold column-level statistics.

0 = Index is not hypothetical.

也可以使用未记录的WITH STATISTICS_ONLY手动创建它们:

CREATE TABLE tab(id INT PRIMARY KEY, i INT);

CREATE INDEX MyHypIndex ON tab(i) WITH STATISTICS_ONLY = 0;
/* 0 - withoud statistics -1 - generate statistics */

SELECT name, is_hypothetical
FROM sys.indexes
WHERE object_id = OBJECT_ID('tab');

db<>fiddle demo