2009-07-01 10 views
0

VARCHARまたはVARRAYの最大整数サイズを実際に必要な値よりもかなり大きな値に設定すること(または値または配列を大きくすることを除いて)許容される最大サイズまで)?VAR型の大きなLIMITの欠点

答えて

2

データベース表の列については、VARCHAR2の最大長を要件によって許容される最小長に設定することをお薦めします。他の制約と同様に、これらの組み込み機能を使用すると役立ちます。有効なデータだけが保存されることを保証するためのデータベース(例えば、1000文字の姓が入力された場合、間違っていると確信しています。

PL/SQL側では、PL/SQLプログラムで文字列を宣言するサイズに応じてメモリ(PGA)の使用方法の違いがあることがわかります。内部的には、PL/SQLエンジンが2つの異なるメモリー割り当て方式を切り替える、2000バイトのしきい値があります。例えば次の宣言は:

DECLARE v VARCHAR2(2000); BEGIN... 

はに対し、ユーザの記憶領域に2000のバイトを割り当てます

DECLARE v VARCHAR2(2001); BEGIN... 

値が割り当てられ、必要とされるだけのような多くのメモリを割り当てる場合にのみメモリを割り当てますそれに割り当てられた値を保持します。

Oracle forum: "VARCHAR2 space allocation"

0

varrayを使用しないでください。ネストした表を使用してください。ネストした表は、アーリー数の要素を保持できます。

表定義でvarchar2(20)の代わりにvarchar2(4000)を使用しても、Oracleが不要な場合にこの領域を要求しないため、実際には問題ありません。

+0

私は十数千のデータポイントの持つ生波形を保存するためにBINARY_FLOATののVARRAYを使用して検討しています。データをより高速に読み取ることができる新しいDAQ機器を購入する場合、その数は簡単に10万を超えることがあります。 私は先に計画を立てようとしています。私はVARRAYの効率を失うかどうか分からなかった。 – Steven

+0

ここをクリックしてください:http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collections.htm#i35815 – tuinstoel

+0

上記のリファレンスからの注意:「あなたの注文とサブスクリプトに依存することはできません。順序と下付き文字がデータベースに保持されないため、ネストした表がネストした表として安定した状態で保存され、データベースから取得されます。それがあなたを気にしないなら、それを求めて行く。 VARRAYは未使用の配列エントリも格納しないので、1つの要素を持つVARRAY(100000)は、1つの要素を持つVARRAY(10)より多くの記憶域を必要としません。 – DCookie

関連する問題