2010-12-17 106 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

相關問題