我创建了一个带有索引varchar2列的Oracle表,称为“ID” 我正在使用的软件正在阅读此表,但不是运行像
这样的查询select * from table_name where ID='something'
它确实(注意值之前的额外“N”)
select * from table_name where ID=N'something'
导致某种字符转换。
问题是,当第一个查询执行范围扫描时,第二个查询正在执行全表扫描。
由于我无法修改此软件运行的查询,我应该使用哪种数据类型而不是varchar2,以便“N”函数执行的转换不意味着全表扫描?
答案 0 :(得分:13)
字符串前面的前缀N用于指定NVARCHAR2或NCHAR数据类型。
将NVARCHAR2与VARCHAR2进行比较时,Oracle会将VARCHAR2变量转换为NVARCHAR2。这就是您正在经历全面扫描的原因。
如果无法修改查询,请在表格中使用NVARCHAR2列而不是VARCHAR2。