在这种情况下,筛选出的非聚集索引是否存在任何性能问题?
我有一个包含10列的堆表:
Create table Test()
{
Field1 INT,
Field2 INT,
Field3 UNIQUEIDENTIFER,
Field4 DATETIME,
Field5 DATETIME,
Field6 DATETIME,
Field7 INT,
Field8 INT,
Field9 INT,
Field10 INT
}
最终用户可以使用以下查询语句从该表中获取报告:
select Field1, Field2
from Test
Where Field4 between @Date1 And @Date2
表Test
是一个具有数百万行的大型表。
我想像这样在表上创建过滤的非聚集索引:
CREATE NONCLUSTERED INDEX IX_Field4
ON Test (Field4)
WHERE Field4 <= @FirstDateOfYear AND Field4 >= @LastDateOfYear
@Date1
和@Date2
参数可以是不同年份或同一年中的任何日期,但通常这两个参数位于当年。
@firstDateOfYear
和@LastDateOfYear
参数是固定的,它们引用了当年的第一个和最后一个日期。
是否存在任何性能问题,您认为SQL Server会随时使用我的索引吗?
假设我无法更改此表结构,例如在表Test
上创建聚集索引,诸如此类
答案 0 :(得分:0)
尝试:
在表中创建Field11 INT
填充Field11 = MillisecondsOf(Field4)
像这样按表查找
select Field1, Field2
from Test
where Field11 <= MillisecondsOf(@Date1)
and Field11 >= MillisecondsOf(@Date2)
答案 1 :(得分:0)
也请忽略我之前的评论。您不能在过滤索引上使用之间。
CREATE NONCLUSTERED INDEX IX_Field4
ON Test (Field4)
INCLUDE ([Field1], [Field2])
WHERE Field4 <= @FirstDateOfYear AND Field4 >= @LastDateOfYear