2010-04-19 21 views
0

当我打电话:如何在t-sql中使用完全限定名称优化查询?

select * from Database.dbo.Table where NAME = 'cat' 

这需要:

200毫秒

当我Management Studio中更改数据库的数据库,并调用它不完全合格的名称它的速度更快:

select * from Table where NAME = 'cat' 

需要:

17毫秒

有没有什么办法,使完全合格的查询速度更快,而不改变数据库?

+0

这可能是由不正确缓存的查询计划造成的......或者与创建新查询计划相关的开销造成的...... – 2010-04-19 10:56:35

+0

请参阅Remus的答案:http://stackoverflow.com/questions/1112374/sql-服务器性能和完全限定表名 – 2010-04-19 10:58:15

+0

@Mitch小麦谢谢你,我已经看到了这个答案,但每次查询我的数据库时都有相同的时间 – 2010-04-19 11:51:40

回答

1

它发生的解决办法是将此数据库上的自动关闭更改为false。

+0

现在已关闭? – gbn 2010-05-02 12:14:51

+1

@gbn是的,它关闭 – 2010-05-05 11:13:52

0

鉴于这两次是因此不同,它可能只是第二次更快,因为SQL从第一次运行它时就缓存了查询计划。你是不是一个接一个地跑这两个?即使是没有任何变化的相同查询在第二次运行时也会快得多。

如果您想要获得准确的查询执行时间,您需要让SQL忘记它在每次运行后缓存的查询计划。我想重新启动SQL是这样做的一种方式。

+0

我试过多次执行这些查询,相反的顺序,仍然有相同的结果。第一次执行后没有任何变化... – 2010-04-19 11:52:56

0

最有可能的区别是因为工作室打开新的数据库连接。为了提供它 - 试着放2个完全限定的sql语句 - 你应该只看到第一个的区别。第二个应运行在相同的连接