有人知道在sql server 2000中使用了什么假设索引吗?我有一个包含15个以上索引的表,但不知道它们是为什么创建的。他们可以减慢删除/插入吗?
答案 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');