読者です 読者をやめる 読者になる 読者になる

crmprogrammer38の日記

プログラマのメモ

【TERADATA】 テーブルの結合や、文字の連結処理では文字コードが揃ってないと遅くなるよ

以前、TERADATAではカラム単位に文字コードが指定できるということを書きました。

 

crmprogrammer38.hatenablog.com

カラムをLATINで定義できれば、UNICODEの半分のサイズとなるので、

・データのサイズも小さくできる

・そのカラムで結合する際に、結合のスピードも向上する

などいいことが多いのですが、注意点もあります。

 

[結合する項目は、文字コードを揃えよう]

テーブル1とテーブル2を結合する際に、テーブル1の結合するカラムをLATIN、テーブル2の結合する項目をUNICODEで定義しないようにしよう。

LATINのカラムとUNICODEのカラムを結合すると、LATIN側のカラムに対してUNICODE変換する処理が走るので注意。

create tableが肝なので、DBAの腕の見せ所かもしれないですね。

 

[連結する際は文字コードを揃えよう]

カラム1とカラム2を連結する際に、カラム1はLATIN、カラム2はUNICODEなどにならないようにしよう。

select col1 || col2 from sample 

これもLATIN側のカラムに対してUNICODE変換する処理が走る。

このようなSQLでは、col1とcol2の文字コードは同じになることをチェックしよう。

コード(LATIN)と名称(UNICODE)を連結するなどはよくやるので注意。UNICODEと文字列連結するのが見えてるなら、あえてカラムをLATINではなく、UNICODEで定義するのも手です。

 

あと、固定値と結合する際も注意

select col1 || ':' || col2 from sample 

このようなSQLでcol1とcol2がLATINで「:」も半角だとしてもcol1とcol2にUNICODEの変換が走る。(V12のバージョンで経験)

select col1 || TRANSLATE(':' USING UNICODE_TO_LATIN) || col2 from sample 

と固定値をLATINにしておくことで解消可能。

 

数十億件のテーブルなどを扱う際には文字コードに気をつけたい。