一位同事要求我查看某些表格的索引,因为他的查询运行时间很长。一个多小时。这个加入提示是否危险?
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万条记录。表3有十几个记录左右。
我查看了查询计划,优化器决定使用Table3作为驱动表,将嵌套循环索引搜索到表1和表2中!
我的第一个假设是,统计数据受到严重搞砸上Tables1 & 2,但更新统计之前,我尝试过加入正是如此联接提示:在15秒内返回
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)
结果。
由于时间不够,我把结果通知给了他,但我担心这可能会导致问题在后面。
我应该重新审视统计问题并以这种方式解决问题吗?糟糕的查询计划是否来自于来自单独数据库的连接?
任何人都可以根据您的经验给我一些想法吗?