SQL Server 查询 - 哪个性能更好?
Posted
技术标签:
【中文标题】SQL Server 查询 - 哪个性能更好?【英文标题】:SQL Server Query - Which is better in performance? 【发布时间】: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
?
你是对的。对不起..再次编辑..嘿嘿嘿。但我知道你已经明白我的意思了。
【参考方案1】:
第一个查询可能会有更好的性能,因为它只需要对table_1
和table_2
进行一次扫描。
【讨论】:
赞赏。顺便说一句,如果设置值?查询 1 将有条件地设置值,因此它会在分配正确的值之前首先检查 col_pk。 是的,但该操作通常比扫描和连接表的工作量少。 谢谢门多西。我有更多的问题,但让我创建另一个线程,因为它会涉及不同的主题。再次感谢。以上是关于SQL Server 查询 - 哪个性能更好?的主要内容,如果未能解决你的问题,请参考以下文章
SQL 多选一个字段值只选一次 和多次从表里查询但查的字段较少 相比哪个性能更好?为啥?
Statement和PreparedStatement有什么区别?哪个性能更好?预编译语句,防止sql注入问题