2010-12-17 79 views
4

我创建了一个带有索引varchar2列的Oracle表,名为'ID'。
我使用软件阅读此表,但不是运行查询,如Oracle:使用'N'函数查询 - 我应该使用哪种数据类型?

select * from table_name where ID='something' 

它(注意额外的“N”之前的值)

select * from table_name where ID=N'something' 

这是造成一些种类转换。
问题是,当第一个查询执行范围扫描时,第二个执行全表扫描。

由于我无法修改该软件正在运行的查询,应该使用哪种数据类型而不是varchar2,因此'N'函数执行的转换并不意味着全表扫描?

回答

12

字符串前面的前缀N用于指定NVARCHAR2或NCHAR数据类型。

将NVARCHAR2与VARCHAR2进行比较时,Oracle将VARCHAR2变量转换为NVARCHAR2。这就是您遇到全面扫描的原因。

如果无法修改查询,请在表中使用NVARCHAR2列而不是VARCHAR2。

+0

非常感谢您的回答。 – 2010-12-17 13:54:05

相关问题