SQL SERVER性能如何?

时间:2009-09-10 09:37:28

标签: sql-server-2005

我加入了两个表,每个表包含超过5000条记录。我用两种方法加入。在第一个查询中,我使用了JOIN关键字并在ON条件下给出了条件。 在第二个查询中,我只是在表之间使用了逗号运算符,并在WHERE子句中给出了连接条件。

哪一项在时间和成本方面会有效....?

当我查看执行计划时,第一次查询为TABLE SCAN花费了61%的成本,为HASH MATCH花费了38%(INNER JOIN)

第二个查询花费了69%的TABLE SCAN和31%的HASH MATCH(INNER JOIN)。

你能解释一下这个区别吗?

Iam假设第一个有效,因为表扫描成本较低。是不是......?

4 个答案:

答案 0 :(得分:1)

TABLE SCAN意味着它必须读取表中的每一行。通常使用执行计划,您可以尽可能使用索引等来摆脱表扫描。表扫描通常是查询运行缓慢的主要原因。 (根据我的经验)

如果SQL运行的总时间与以前相比减少,则百分比减少只是一个改进

例如,如果使用稍微减少的TABLE SCAN的第一个查询花了20秒而不是10秒,那么它就不那么有用了。

当然,如果您希望优化查询,那么您可以应用许多方法来尝试和改进它。 (索引优化向导,创建索引(群集/非群集),查看执行计划 - 识别潜在的瓶颈等...)

SQL优化本身就是一种艺术形式

答案 1 :(得分:1)

听起来像我的查询计划在两种情况下都是相同的......因为你有两次表扫描和哈希匹配......

在您尝试比较这些百分比之前......让我用这个问题说明危险:

哪个更大

61% of 465

69% of 234

<强> ...

在这种情况下,您可能会看到,234中的69%远远超过465的61%。它全部相对于查询的总成本。

只是比较百分比时要小心,因为你不知道在两种情况下对应于100%的实际值是多少......例如在第二种情况下,总执行成本可能会降低。

答案 2 :(得分:0)

定义'有效'。如果速度是您的目标,请选择“显示客户端统计信息”,至少运行两次查询(当然,在不同的查询窗口中),并评估结果。

答案 3 :(得分:0)

这两种技术在逻辑上是等价的 但是根据解析器的方式,可能会有非常不同的性能命中 计划查询。决定时你需要考虑两个关键因素 技术之间:

  1. 哪个版本会生成更优化的查询计划。

  2. 如果以后需要对代码进行改造,哪个更易于维护 合并更多连接(INNER或OUTER)表。

  3. INNER JOIN vs WHERE clause