我有一个在 SQL Server 2008 中运行的查询:
select count(*)
from table1 join
table2 on table1.col1 = table2.col2
Run Code Online (Sandbox Code Playgroud)
在运行此脚本的数据仓库中,一个名为的表thin_table1
专门填充table1
(我们使用此薄表创建索引视图。阅读此答案了解更多详细信息)。
问题是优化器选择使用thin_table1
而不是table1
在执行期间。这在 SQL Server 2005 中不会发生。这个新的执行计划不适用于我们当前的操作。
如何在数据库或会话级(或在 SSIS 中)关闭此“传递”功能?我在数据加载期间运行了许多 SSIS 包和存储过程,所以我不想单独接触所有对象。
此时,即使知道该功能称为什么也有助于寻找答案。
编辑:
在 2005 年回过头来看看同样的计划。看起来它确实发生在那里,但它的戏剧性效果要小得多。我认为这是 2008 年的问题,但 2005 年出现了相同的功能。
EDIT2:
这里的 DBA 注意到该计划正在引用索引视图。我们通常在运行时删除索引视图,但在这个测试场景中,它们仍然被构建。看起来当索引视图处于活动状态时,它将在查询执行时使用该视图以及与其关联的任何表。
有没有办法绕过这种对索引视图的自动引用?