【问题标题】:SQL Server Query - Which is better in performance?SQL Server 查询 - 哪个性能更好?
【发布时间】:2016-11-07 05:29:54
【问题描述】:

我认为查询 1 比查询 2 更具可读性,但我想知道它们在性能方面是否有任何区别?

查询 1

UPDATE table_1
SET col_1 = 
      CASE WHEN table_1.col_pk IS NULL THEN value1
           ELSE value2
      END
FROM table_1
LEFT JOIN table_2 ON table_1.col_pk = table_2.col_pk

或

查询 2

UPDATE table_1
SET col_1 = value1
FROM table_1
LEFT JOIN table_2 ON table_1.col_pk = table_2.col_pk
WHERE table_1.col_pk IS NULL

UPDATE table_1
SET col_1 = value2
FROM table_1
INNER JOIN table_2 ON table_1.col_pk = table_2.col_pk

【问题讨论】:

  • 基准测试............
  • CASE WHEN col_pk IS NULL 两个col_pk中的哪一个?
  • 哎呀对不起.. table_1.col_pk 代替。谢谢。我会更新线程。
  • 在第一个查询中,如果 table_1.col_pk IS NULL 是一个 PK 并且您将它作为 LEFT JOIN 的左侧部分,我认为它永远不会是真的。你可能是想在那里写table_2.col_pk IS NULL?
  • 你是对的。对不起..再次编辑..嘿嘿嘿。但我知道你已经明白我的意思了。

标签: sql sql-server query-performance


【解决方案1】:

第一个查询可能会有更好的性能,因为它只需要对table_1 和table_2 进行一次扫描。

【讨论】:

  • 赞赏。顺便说一句,如果设置值?查询 1 将有条件地设置值,因此它会在分配正确的值之前首先检查 col_pk。
  • 是的,但该操作通常比扫描和连接表的工作量少。
  • 谢谢门多西。我有更多的问题,但让我创建另一个线程,因为它会涉及不同的主题。再次感谢。
猜你喜欢
  • 2019-05-06
  • 2015-03-14
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多