2011-11-26 153 views
5

如果我在多列上查詢具有唯一索引的數據庫(Oracle),如果將VARCHAR2中的某一列更改爲NUMBER,性能是否會有所不同?
如果有,是重要VARCHAR2與NUMBER之間的性能差異

(它的VARCHAR2,因爲我需要「0」開頭,但我可以在我的應用程序改變它在表示層)

+0

您需要定義'顯着'。 NUMBERS會更快。 – Randy

+0

VARCHAR2和NUMBER之間的差異並不那麼顯着(它們的存儲方式相似)。多列唯一索引中的列的ORDER可能很重要。 – ibre5041

回答

3

比我知識淵博的人告訴我,在Oracle中,number和varchar2之間的性能差異完全取決於您的數據,因爲它們在內部具有非常相似的表示。 請參閱以下內容:

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2669498700346402356

還望的 「內部數據格式」 部分:

http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT012

如果,例如,您的VARCHAR數據實際上是單個字符(如如'Y','N'),那麼你可能會比數字更適合varchars。如果你的代碼少於100個,但是你的字符串相當於8個字符,那麼你可能會比數字更好。

+0

謝謝,雖然晚會到了派對,但與湯姆的鏈接值得... ... :) – gdoron

4

是的,它應該是更快的使用數量。是否給你增加一個顯着取決於你的數據,索引和查詢。如果你遇到性能問題,這不太可能是魔術解決方案。

+0

有沒有措施知道會有多少影響力?讓我們用百分比來表示。我沒有性能問題,但我不想有一天.. – gdoron

+0

如果該列不會是唯一的索引之一,我不會過濾他,只有他的價值,它會仍然會降低性能? – gdoron

+5

@gdoron你幾乎總是把數字和文本存儲爲文本。使用NUMBER類型應該更加高效(在空間和性能方面),並且您可以避免一些潛在的問題(例如,如果您不小心嘗試存儲不是該列中的數字的事情,則會提前發出警告)。如果你只有少量的數據,你可能不會注意到在性能上有太大的差別,但如果做和測試很便宜,那麼這可能是正確的做法。 –

相關問題