SQL大CASE与大型SELECT输出的JOIN效率

时间:2017-04-04 17:17:32

标签: sql-server

我使用一个相当不受欢迎的数据库 - 每天的性能各不相同,所以我想尽可能快地输出。我希望找出将值附加到输出的最有效方法。对于大多数套件,我必须输出相当宽的最终尺寸(超过20-60列,60-500k行),因此也必须考虑加工。基准测试对此有点棘手,因为它似乎随服务器负载而变化。

所以,加入一个大桌子,加上一个长期的CASE论证 - 两者似乎都很笨拙,但是最好的行动方案是什么?

示例:

- 实体表输出将产生250k行,50列 - 实体类型表有1k行,2列(键和描述)

select e.*, et.description 
from Entities e  
inner join entity_types et ON e.entity_type_key = et.entity_type_key;

〜或〜

select e.* 
case 
when e.entity_type_key = 1 then 'Description 1 from entity_types'
when e.entity_type_key = 2 then 'Description 2 from entity_types'
(repeat about 1k times)..

from Entities e 

1 个答案:

答案 0 :(得分:0)

在这种特殊情况下,你不会看到很大的不同。表将被缓存(可能)并且查找将非常快(我们可以假设表非常小)。 Case语句需要稍微多一点时间进行解析(一些纳秒,我不知道)和稍微多一点的网络流量,但是......再一次,我认为你根本不应该考虑它。

您甚至可以将其映射到应用程序层。或者只是使用join,因为它更具可配置性和可读性。