6

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

4

5 回答 5

3

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

如果留下一些可能会导致一些问题,请参阅此链接以了解删除它们的方法

于 2008-09-29T15:40:22.427 回答
1

不确定 2000 年,但 2005 年的假设索引和数据库对象通常是由DTA(数据库优化顾问)创建的对象

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

SELECT  *
FROM    sys.indexes
WHERE   is_hypothetical = 1

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

于 2008-09-29T15:36:49.797 回答
1

谷歌搜索“sql server 假设索引”返回以下文章作为第一个结果。引用:

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

于 2008-09-29T15:38:59.917 回答
0

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

于 2008-09-29T15:37:02.510 回答
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.

它们也可以使用 undocumented 手动创建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<>小提琴演示

于 2019-06-29T20:59:02.880 回答