2009-04-21 8 views
1

VARCHAR2(1バイト)を使用すると、CHAR(1バイト)を使用するよりも効率が低下しますか?Oracleキャラクタ・タイプ

VARCHAR2(2000 BYTE)をCHAR(1 BYTE)を使用するよりも効率的ではありません。フィールドに1文字以上の値を入れない場合はどうしますか?

**効率的に、私は時間(検索)とスペース(保存)の両方で効率的であることを意味しました。

+1

効率的です。ストレージ? – cagcowboy

+0

私は、時間(検索)と記憶の両方に関して効率的であることを意味しました。 – Steven

答えて

5

キャラクタ・セットによっては、CHAR(1バイト)に特定のキャラクタを格納できない場合があります。マルチ・キャラクタ・セットについて話している場合、VARCHAR2(2000バイト)とCHAR(1バイト)バイト文字。

より一般的には、SQLでは(PL/SQLルールは少し異なります)VARCHAR2(2000バイト)は、わずか1バイトのデータを格納する場合、CHAR(1バイト)より多くの記憶領域を消費しません。 (私は「効率的」は主にストレージ効率に変換すると仮定します)。 VARCHAR2(2000 BYTE)は、クライアントアプリケーションがフィールドの内容を保持するために2000バイトのバッファを割り当てることが頻繁に発生します。これは、クライアントアプリケーションが実際のデータサイズを事前に知らないために、 RAMの量しかし、それは実際の問題になるかもしれないし、そうでないかもしれない。ほとんどのクライアントアプリケーションはRAMを傷つけず、ほとんどの結果セットはクライアントに何百万もの行を返さないため、数百行に2つのkを無駄にすることは大したことではないかもしれません。

具体的には、特にPL/SQLルールに関してはAskTom threadがあります。

+0

VARCHAR2エントリの長さはどのように格納されていますか?文字列はヌル終端されていますか(Cのように)か、長さの値がありますか? この長さの決定は効率を低下させるでしょうか? – Steven

+1

CHARおよびVARCHAR2列の両方に、ブロック・ヘッダーにlength属性があります。したがって、VARCHAR2(2000)かCHAR(1)かを問わず、長さフィールドに2バイトのストレージを追加します。 –

関連する問題