当我打电话:如何在t-sql中使用完全限定名称优化查询?
select * from Database.dbo.Table where NAME = 'cat'
这需要:
200毫秒
当我Management Studio中更改数据库的数据库,并调用它不完全合格的名称它的速度更快:
select * from Table where NAME = 'cat'
需要:
17毫秒
有没有什么办法,使完全合格的查询速度更快,而不改变数据库?
当我打电话:如何在t-sql中使用完全限定名称优化查询?
select * from Database.dbo.Table where NAME = 'cat'
这需要:
200毫秒
当我Management Studio中更改数据库的数据库,并调用它不完全合格的名称它的速度更快:
select * from Table where NAME = 'cat'
需要:
17毫秒
有没有什么办法,使完全合格的查询速度更快,而不改变数据库?
它发生的解决办法是将此数据库上的自动关闭更改为false。
现在已关闭? – gbn 2010-05-02 12:14:51
@gbn是的,它关闭 – 2010-05-05 11:13:52
鉴于这两次是因此不同,它可能只是第二次更快,因为SQL从第一次运行它时就缓存了查询计划。你是不是一个接一个地跑这两个?即使是没有任何变化的相同查询在第二次运行时也会快得多。
如果您想要获得准确的查询执行时间,您需要让SQL忘记它在每次运行后缓存的查询计划。我想重新启动SQL是这样做的一种方式。
我试过多次执行这些查询,相反的顺序,仍然有相同的结果。第一次执行后没有任何变化... – 2010-04-19 11:52:56
最有可能的区别是因为工作室打开新的数据库连接。为了提供它 - 试着放2个完全限定的sql语句 - 你应该只看到第一个的区别。第二个应运行在相同的连接
这可能是由不正确缓存的查询计划造成的......或者与创建新查询计划相关的开销造成的...... – 2010-04-19 10:56:35
请参阅Remus的答案:http://stackoverflow.com/questions/1112374/sql-服务器性能和完全限定表名 – 2010-04-19 10:58:15
@Mitch小麦谢谢你,我已经看到了这个答案,但每次查询我的数据库时都有相同的时间 – 2010-04-19 11:51:40