0

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

该查询正在对列进行案例分析,以便根据数字返回不同的文本值。如果我有一个值为 1-5 和 8-10 的表,如果某物的值为 1,它应该显示“Apple”,或者如果它是 2,它必须显示“pear”,如果它不是 1-5,那么它是'其他'。目前正在使用 case 语句,但我听说查询中的函数会使其变慢。

我想要的只是出现“措辞”而不是数字,但是因为表格太大了,我感觉就像它正在迭代每一行以确定要显示的内容。

有没有更快的方法。我考虑过加入,看起来效果不错,但我不知道如何为 1-5 以外的任何东西写“其他”

4

1 回答 1

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

我希望案例陈述会稍微快一些。

于 2013-01-28T16:54:31.840 回答