2010-12-17 15 views
4

「ID」と呼ばれるインデックス付きのvarchar2列を持つOracleテーブルを作成しました。
私が使用しているソフトウェアは、このテーブルを読んでいるが、その代わりにOracle: 'N'関数を使用したクエリ - どのデータ型を使用する必要がありますか?

select * from table_name where ID='something' 

ようなクエリを実行するのには、いくつかの原因になっている

select * from table_name where ID=N'something' 

(値の前に余分な「N」を気づく)ん種類の文字変換。
問題は、最初のクエリで範囲スキャンが実行されている間に2番目のクエリが完全なテーブルスキャンを実行していることです。

このソフトウェアが実行しているクエリを変更することはできません。なぜなら、 'N'関数によって実行される変換がフルテーブルスキャンを意味しないように、varchar2の代わりにどのデータタイプを使用する必要がありますか?

答えて

12

文字列の前に接頭辞Nを付けて、NVARCHAR2またはNCHARデータ型を指定します。

NVARCHAR2とVARCHAR2を比較すると、OracleはVARCHAR2変数をNVARCHAR2に変換します。このため、フルスキャンが発生しています。

クエリを変更できない場合は、テーブル内のVARCHAR2の代わりにNVARCHAR2列を使用してください。

+0

ご回答いただきありがとうございます。 –

関連する問題