2012-08-22 79 views
-1

我一直在寻找在SQL Server的一些提示和技巧查询Opitimization 2008查询优化技巧

我来到了防空火炮低于我不是很确定是什么使用视图/ triggies的后果

  • 尝试更换与原始源表视图
  • 触发器不应该被尽可能使用,结合触发的逻辑在存储 过程

有人可以阐明这些解释优点和缺点,也可以指出我的查询优化的一般提示和技巧列表。

+0

我的问题不明智吗?还是那个投下的选手是如此天才,以至于他不明白在问什么?至少在投票时发表评论;所以其他人可以理解你最新是什么,或者在问题 – Sreedhar

+2

中有什么问题。或许他们觉得你的问题根据[StackOverflow FAQ](http://stackoverflow.com/faq#questions)是不恰当的。这不是一个具体问题,而是一个开放式讨论的邀请。无论如何,我没有以任何方式投票。 – HABO

回答

0

视图是由查询形成的虚拟表,例如'SELECT a,b FROM tableC'这创建了一个& b的'虚拟表'。源表是其自身的表,并且能够'SELECT * FROM tableC'以便不创建虚拟表的能力高得多。

触发器是在发生指定事件(例如特定查询)时触发的事件。存储过程是编译的事务,并且可以像触发器一样运行,除非它们效率更高。总之,不要使用触发器。

我会认真考虑这个http://www.amazon.com/SQL-Tuning-Dan-Tow/dp/0596005733/ref=sr_1_1?ie=UTF8&qid=1345679033&sr=8-1&keywords=sql+optimization

+0

对于虚拟表答案。数据库设计应该是这样的:查询通常需要从返回的每一行的给定源列返回的所有信息。因此,如果您有一个查询只从表格中选择某些列,那么您的模式效率不高。 – David

+0

我不同意视图是“虚拟表”。但@大卫我不确定我遵循你的逻辑。因此,如果我有一个OrderDetails表,并且使用查询来获取尚未发货的订单所需的产品x单位总数,则我的模式是垃圾,因为我的查询没有查看单价栏,这与我目前正在运行的查询无关? –

+0

你会使用'SELECT COUNT(unit)FROM OrderDetails'这样的查询,并且由于count没有仅返回一个“行列表”,所以没有创建虚表,所以不,你的模式是在这种情况下不是垃圾。如果您正在运行'SELECT unit FROM OrderDetails',然后使用其他函数进行计数,那么您正在创建一个虚拟表,并且效率不高。 – David