对于数据库来说,选择正确的数据类型是否会影响性能?

7

如果是这样,为什么呢?我的意思是,tinyint比int更快搜索吗?

如果是这样,性能上有哪些实际差异?

7个回答

8
根据数据类型的不同,确实会有所区别。inttinyint在速度上没有明显区别,但数据大小却有所不同。假设tinyint是1字节,而int则是4字节,每行可以节省3字节,随着时间的推移,这些节省的空间将累积起来。
现在,如果是intvarchar进行比较,那么会有一些下降,因为对于整数值,排序等操作要比字符串值快得多。
如果它是可比较的类型,并且你并不需要特别节省空间,那么选择更易于使用和更加稳健的一个。

3
理论上,是的,tinyint比int更快。但是良好的数据库设计和适当的索引对性能有更加实质性的影响,因此我总是使用int来保持设计的简单性。

3

我认为在这种情况下没有实际的性能差异。存储空间是更重要的因素,但即使如此,差别也不大。差别可能只有2个字节?在500,000行之后,你几乎使用了额外的1兆字节。希望你不会因为处理这么多数据而担心一兆字节的空间。


2
选择正确的数据类型可以提高性能。在很多情况下,实际差别可能并不大,但是选择不当肯定会产生影响。想象一下,当你只需要存储几个字符的字符串时,使用一个1000个字符的char字段而不是varchar字段。这是一个有点极端的例子,但你肯定会更好地使用varchar。你可能永远不会注意到int和tinyint之间的性能差异。你的整体数据库设计(规范化的表、良好的索引等)将产生更大的影响。

1

1

性能考虑完全取决于您的模型规模和使用情况。虽然在现代时代存储空间的考虑几乎不是问题,但您可能需要考虑性能:

数据库引擎倾向于将数据存储在称为页面的块中。 Sql Server具有8k页面,Oracle具有2k页面大小,MySql默认为16k页面大小?对于这些系统中的任何一个来说都不算太大。每当您对一小部分数据(字段和行)执行操作时,其整个页面都会从数据库中获取并放入内存中。当您的数据较小时(tiny int vs. int),则可以将更多的单个行和数据项放入页面中,因此您需要获取更多页面的可能性降低,整体性能加快。因此,是的,使用数据的最小可能表示肯定会对性能产生影响,因为它使数据库引擎更加高效。


1

它会影响性能的一种方式是不需要将数据转换为正确的类型来操作数据。例如,当有人使用varchar而不是datetime数据类型时,就必须进行转换才能进行日期计算。此外,定义所有内容的最大大小会导致记录变小,从而影响数据库中页面的存储和检索。

当然,使用正确类型的数据也可以帮助数据完整性;在datetime字段中无法存储不存在的日期,但在varchar字段中可以。如果您使用float而不是int,则您的值不受整数值的限制等。而且,说到float,如果您打算进行数学计算,则通常不建议使用它,因为它不是精确类型,会产生舍入误差。


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