0

当然,对于大多数小型事务来说,这并不是一个很大的因素,但是对于更大的数据集,假设有有用的索引,使用 JOIN 而不是使用 CASE 进行 INSERT 是否更快?

使用 CASE 的示例(在 T-SQL 中):

INSERT into Foo
(CarID, CarMake)
(SELECT CarID,
   CASE WHEN CarModel = 'Odyssey' THEN 'Honda'
        WHEN CarModel = 'Sienna' THEN 'Toyota' END
        as CarMake
    FROM FooCar)

使用 JOIN 的示例:

INSERT into Foo
(CarID, CarMakeID)
(SELECT A.CarID, B.CarMake
 FROM FooCar as A
 JOIN FooMake as B on (A.CarModel = B.CarModel)
 )

这两个陈述中的哪一个会达到更快的目标?请查看示例数据样本,它不能很好地代表问题的大小。我找不到像这样的另一个问题,但似乎应该已经提出并回答了一些问题。

4

2 回答 2

4

一般来说,该case语句会更快。在join大多数其他方面都更好。拥有引用表的目的是避免在代码中对特定值进行硬编码。最好使用参考表。

性能差异通常会非常小,特别是如果FooMake设计得当并且在CarModel. 您不应该在查询中寻找这种微优化。首先努力使查询正确工作,使用合理的 SQL,然后再提高性能。

仅当所有品牌都出现在 中并且仅在 中出现一次时,这两个版本才等效FooMake

于 2013-09-18T16:47:35.247 回答
1

硬编码的查询值(如 CASE 语句中的那些字符串文字)将被翻译成内存中的机器语言命令,并且总是比执行连接所需的磁盘 I/O 更快。

您拥有表而不是 CASE 语句的原因是可维护性而不是速度。如果 CASE 语句作用于两个字段而不是一个字段怎么办?或者添加一些分支逻辑?对速度查询进行硬编码就像在雪地摩托上穿越冰冻的苔原,雪地摩托会翻过来,把你困在下面。晚上,冰鼬来了。

于 2013-09-18T16:49:38.083 回答