VARCHAR2和NUMBER之间的性能差异

5
如果我使用具有多列唯一索引的数据库(Oracle)进行查询,如果我将其中一个列从VARCHAR2更改为NUMBER,是否会有任何性能差异?如果有,那么它是否显着?
(它是varchar2,因为我需要在开头加上“0”,但我可以在我的应用程序的显示层中更改它。)

你需要定义“significant”的含义。数字会更快。 - Randy
VARCHAR2和NUMBER之间的区别并不是很显著(它们存储方式相似)。多列唯一索引中列的顺序可能非常重要。 - ibre5041
2个回答

4
比我更有经验的人告诉我,在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个字符,则最好使用数字而不是varchars。

谢谢,虽然来晚了,但链接到Tom真的很值得... :) - gdoron

4

是的,使用NUMBER应该会更快。但是它是否能够显著提高性能取决于您的数据、索引和查询。如果您遇到了性能问题,这并不是一个神奇的解决方案。


有没有一种衡量方式来知道将会有多大的影响?比如说百分比。我目前没有性能问题,但是希望以后也不会出现。 - gdoron
如果该列不是唯一索引之一,而且我不会通过它进行筛选,只是获取其值,那么它是否仍会降低性能? - gdoron
5
将数字存储为数字,将文本存储为文本通常更好。使用NUMBER类型应该更高效(在空间和性能方面),并且可以避免一些潜在的问题(例如,如果您意外地尝试将不是数字的内容存储在该列中,则会提前发出警告)。如果数据量很小,则进行此更改可能不会显著提高性能,但如果这样做和测试很便宜,那么这可能是正确的做法。 - Matthew Strawbridge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接