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

ただし、caseステートメントの方がわずかに速いと思います。

于 2013-01-28T16:54:31.840 に答える