2011-11-26 150 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类型应该更加高效(在空间和性能方面),并且您可以避免一些潜在的问题(例如,如果您不小心尝试存储不是该列中的数字的事情,则会提前发出警告)。如果你只有少量的数据,你可能不会注意到在性能上有太大的差别,但如果做和测试很便宜,那么这可能是正确的做法。 –

相关问题