如何为 MS-SQL 服务器索引视图提供索引提示?
How can I provide an Index Hint to a MS-SQL Server Indexed View?
我有一个索引视图 FooView
。
我已经针对它创建了以下索引:
CREATE UNIQUE CLUSTERED INDEX IX_Foo1 ON [FooView](SomeId, AnotherId)
CREATE NONCLUSTERED INDEX IX_Foo2 ON [FooView](SomeId)
是否可以针对 IX_Foo2
使用 HINT?当我使用 WITH (NOEXPAND)
提示时它一直使用 IX_Foo1
。
是的,这非常简单
CREATE TABLE dbo.FooTable
(
SomeId INT,
AnotherId INT,
Filler CHAR(8000)
);
go
CREATE VIEW dbo.FooView
WITH SCHEMABINDING
AS
SELECT SomeId,
AnotherId,
Filler
FROM dbo.FooTable
GO
CREATE UNIQUE CLUSTERED INDEX IX_Foo1
ON dbo.FooView(SomeId, AnotherId)
CREATE NONCLUSTERED INDEX IX_Foo2
ON dbo.FooView(SomeId)
GO
SELECT SomeId
FROM dbo.FooView WITH (noexpand) --No hint non clustered index chosen automatically
SELECT *
FROM dbo.FooView WITH (noexpand) --No hint clustered index chosen automatically
SELECT *
FROM dbo.FooView WITH (noexpand, INDEX = IX_Foo2) --With hint nonclustered index forced
执行计划
(请注意,与将选择权留给优化器相比,使用提示强制索引会导致更昂贵的计划)
我有一个索引视图 FooView
。
我已经针对它创建了以下索引:
CREATE UNIQUE CLUSTERED INDEX IX_Foo1 ON [FooView](SomeId, AnotherId)
CREATE NONCLUSTERED INDEX IX_Foo2 ON [FooView](SomeId)
是否可以针对 IX_Foo2
使用 HINT?当我使用 WITH (NOEXPAND)
提示时它一直使用 IX_Foo1
。
是的,这非常简单
CREATE TABLE dbo.FooTable
(
SomeId INT,
AnotherId INT,
Filler CHAR(8000)
);
go
CREATE VIEW dbo.FooView
WITH SCHEMABINDING
AS
SELECT SomeId,
AnotherId,
Filler
FROM dbo.FooTable
GO
CREATE UNIQUE CLUSTERED INDEX IX_Foo1
ON dbo.FooView(SomeId, AnotherId)
CREATE NONCLUSTERED INDEX IX_Foo2
ON dbo.FooView(SomeId)
GO
SELECT SomeId
FROM dbo.FooView WITH (noexpand) --No hint non clustered index chosen automatically
SELECT *
FROM dbo.FooView WITH (noexpand) --No hint clustered index chosen automatically
SELECT *
FROM dbo.FooView WITH (noexpand, INDEX = IX_Foo2) --With hint nonclustered index forced
执行计划
(请注意,与将选择权留给优化器相比,使用提示强制索引会导致更昂贵的计划)