2010-03-14 166 views
2

我想了解使用SQL Server 2005的SQL查询优化。但是,我没有找到任何实际的例子,我可以通过单独调整查询来提高性能。你能列举一些示例查询 - 优化之前和之后?查询优化

它必须是查询调优 - 不添加索引,不覆盖索引,不对表进行任何更改。在表和索引上应该没有改变。 [我明白指标很重要。这只是用于学习目的]

如果你可以使用临时表来解释,而不是像冒险工作室那样引用任何示例数据库,那将是非常好的。

+0

查询优化不能孤立并没有考虑到指标进行;除了显然没有做一个SELECT'*',或者使用IF EXISTS而不是SELECT COUNT('*')(由于评论解释一个星号的方式引起的单引号) – 2010-03-14 06:35:13

+0

我正在精确地查找'IF EXISTS'之类的东西。你能列出那些明显的东西吗? – Lijo 2010-03-14 06:54:58

回答

1

1)在SELECT,UPDATE和DELETE中尽可能多地使用JOIN。有时候人们通过记录(或使用游标)来循环更新,从表中删除记录,但几乎总是可以通过JOIN表来实现相同的功能,并且会大大提高性能。示例here。 2)你不需要使用临时表,除非你得到一些记录并对其执行一些中间操作并返回结果。为此,无论如何你应该使用Table variables。 3)如果你不想使用临时表为上述原因,因为你不需要中间更新等,但你仍然想使用结果集进一步连接,请尝试使用CTE (Common table expressions)。我知道它可能与性能无关,但对派生表非常有用。

4)正如有人建议上面,尝试使用IF EXISTS而不是COUNT也不错。

5)尽可能在SELECT查询中尽量使用列名而不是*。

-1

作为您学习的第一步,请在您的查询中使用explain

+0

错误的RDBMS - 他使用的是SQL Server 2005,而不是MySQL。 – roufamatic 2010-03-14 07:18:15

+0

相当于**'SET SHOWPLAN_ALL ON ** **? – kiwicptn 2010-03-14 07:27:31