Oracle: запрос с функцией 'N' - какой тип данных мне следует использовать? - PullRequest
4 голосов
/ 17 декабря 2010

Я создал таблицу Oracle с индексированным столбцом varchar2, который называется 'ID'.
Программное обеспечение, которое я использую, читает эту таблицу, но вместо выполнения запросов типа

select * from table_name where ID='something'

онаделает (обратите внимание на дополнительный «N» перед значением)

select * from table_name where ID=N'something'

, что вызывает какое-то преобразование символов.
Проблема в том, что, когда 1-й запрос выполняет сканирование диапазона, 2-йвыполняет полное сканирование таблицы.

Поскольку я не могу изменить запросы, выполняемые этим программным обеспечением, какой тип данных следует использовать вместо varchar2, чтобы преобразование, выполняемое функцией 'N', не подразумевалополное сканирование таблицы?

1 Ответ

13 голосов
/ 17 декабря 2010

Префикс N перед строкой используется для указания типа данных NVARCHAR2 или NCHAR.

При сравнении NVARCHAR2 с VARCHAR2s Oracle преобразует переменную VARCHAR2 в NVARCHAR2.Вот почему вы испытываете полное сканирование.

Используйте столбец NVARCHAR2 вместо VARCHAR2 в вашей таблице, если вы не можете изменить запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...