【发布时间】:2016-05-31 16:08:23
【问题描述】:
在将代码转换为文本时,我可以在两种不同的技术之间进行选择:
insert into #TMP_CONVERT(code, value)
(1, 'Uno')
,(2, 'Dos')
,(3, 'Tres')
;
coalesce(tc.value, 'Unknown') as THE_VALUE
...
LEFT OUTER JOIN #TMP_CONVERT tc
on tc.code = x.code
或者
case x.code
when 1 then 'Uno'
when 2 then 'Dos'
when 3 then 'Tres'
else 'Unknown'
end as THE_VALUE
该表有大约 2000 万行。 代码查找表的典型大小为 10 行。
我宁愿#1,但我不喜欢左外连接。
我的问题是:
一个比另一个快吗?
是否有任何 SQL 引擎对此进行优化?那就是:它只是将表读入内存,本质上是case语句逻辑吗?
我碰巧在使用 tsql,但我想知道任意数量的 RDBM 系统,因为我使用了多个。
[编辑以澄清不喜欢 LEFT OUTER JOIN] 我在需要时使用 LEFT OUTER JOINS,但每当我使用它们时,我都会仔细检查我的逻辑和数据以确认我确实需要它们。然后我在代码中添加一个注释,说明我为什么使用 LEFT OUTER JOIN。当然我在使用 INNER JOIN 的时候也要做类似的练习;也就是说:确保我没有丢弃数据。
【问题讨论】:
-
我很好奇有一个用例会支持在代码中而不是静态表中查找数据。遇到任何情况,我都会创建一个用户无需更改代码即可编辑的表格。
-
可能值得一读 Eric Lippert 的优秀文章Which is faster?:“...如果你有两匹马,并且你想知道哪两匹马跑得更快,那就让你的马赛跑吧。不要写短马匹的描述,将它们发布到互联网上,让随机的陌生人猜猜哪个更快!”
-
对 2000 万行运行它们会得到什么结果?
标签: sql-server tsql