SQL根据查询结果返回自定义值,同时牢记性能

时间:2013-01-28 16:45:27

标签: sql sql-server tsql

我需要有关查询性能的帮助,我的速度非常慢。

查询在列上执行大小写以返回不同的文本值 根据数量。 如果我有一个值为1-5和8-10的表如果某个值为1,它应该显示'Apple'或如果它是2它必须显示'pear'如果它不是1-5,那么它是'其他'。目前正在使用case语句,但我听说查询中的函数使它变慢。

我想要的只是出现'Wording'而不是数字,但由于表格太大,我觉得它只是迭代每一行来确定要显示的内容。

有没有更快的方法这样做。我考虑做一个连接,看起来它会很好用,但我不知道如何为1-5以外的任何东西写'其他'

1 个答案:

答案 0 :(得分:1)

case语句不是函数。用户定义的函数在某些版本的SQL中确实有额外的开销。作为一般规则,您不需要担心内置函数的开销。

您可以通过以下方式执行此操作:

with lookup  as (
     select 1 as val, 'Apple' as str union all
     select 2 as val, 'Pear' as str union all
     select 3 union all select 4 union all select 5
)
select coalesce(l.val, 'other')
from t left outer join
     lookup l
     on t.col = l.val

我希望案例陈述能够略微加快。