一位同事要求我查看一些表的索引,因为他的查询运行时间很长。一个多小时。
select count(1)
from databaseA.dbo.table1
inner join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)
注意不同的数据库。这是从 DatabaseB 运行的
表 1 和表 2 的记录超过 200 万条。Table3 有十几条记录。
我查看了查询计划,优化器决定对表 1 和表 2 进行嵌套循环索引搜索,表 3 作为驱动表!
我的第一个假设是 Tables1 和 2 上的统计信息严重混乱,但在更新统计信息之前,我尝试添加一个连接提示:
select count(1)
from databaseA.dbo.table1
inner HASH join databaseA.dbo.table2 on (table1.key = table2.key)
inner join databaseB.dbo.table3 on (table1.key = table3.key)
结果在 15 秒内返回。
由于时间紧迫,我将结果反馈给了他,但我担心这可能会导致以后出现问题。
我应该重新审视统计问题并以这种方式解决问题吗?错误的查询计划可能是因为连接来自单独的数据库吗?
任何人都可以根据您的经验给我一些想法吗?