5 database-design sql-server datatypes
使用正确的数据类型对 SQL Server 有什么好处?
例子:
如今,有了现代计算,这真的很重要吗?
谢谢,
Dav*_*ett 18
使用正确的数据类型对 SQL Server 有什么好处?
如果您使用正确的数据类型,您的数据库将更好地匹配您的模型,并且在空间和速度方面更有可能高效。你有可能因为这个问题“太宽泛”而被关闭,因为它可能是一个相当广泛的主题。
要触及您更具体的要点:
SmallInt/TinyInt 与常规整数
较小的类型占用更少的空间,因此更多的行可以放入页面,从而减少磁盘和内存占用的空间。当然,如果您选择的类型太小,您的应用程序就会失败。还要考虑BIGINT何时可能需要大于 2,147,483,648(或小于 -2,147,483,647)的值。
当您考虑索引时,差异会成倍增加:较大的类型最终会出现在覆盖列的任何索引中。
十进制(2)与浮点数
这里有很大的不同。DECIMAL(及其同义词NUMERIC)实际上是保证具有您指定的精度的缩放整数。浮点数有它们的用途,但要非常小心,因为它们只是近似值,因为在二进制和十进制形式之间转换的舍入问题 - 最常见的例子是 0.1+0.2 通常不等于 0.3。有关详细信息,请参阅http://floating-point-gui.de/以及许多其他参考资料,并运行它以直接查看效果:
SELECT CAST(0.1 AS FLOAT ) + CAST(0.2 AS FLOAT ), CASE WHEN CAST(0.1 AS FLOAT ) + CAST(0.2 AS FLOAT ) = 0.3 THEN 'OK' ELSE 'oops' END
SELECT CAST(0.1 AS DECIMAL(10,2)) + CAST(0.2 AS DECIMAL(10,2)), CASE WHEN CAST(0.1 AS DECIMAL(10,2)) + CAST(0.2 AS DECIMAL(10,2)) = 0.3 THEN 'OK' ELSE 'oops' END
Run Code Online (Sandbox Code Playgroud)
本质上:FLOAT除非您知道它是您需要的,否则不要使用。
Varchar(100) 与 char(100)
可变长度类型在空间方面更有效,但在 CPU 方面处理效率较低。如果您使用(MAX)它们,它们很可能会被存储在页外,这再次降低了效率,并且如果您在表上使用它会停止压缩生效。如果您使用行或页面压缩,您的固定长度类型无论如何都会变成可变长度,但您保留对您的模型可能有用的内置长度验证。
如今,有了现代计算,这真的很重要吗?
简短的回答:是的。
长答案:Yyyyyyyyeeeeeeeeeeeeeessssssssssss!
现代 CPU 的考虑因素可能略有不同 - 它们相对于存储和网络传输而言可能比以前快得多,因此以额外的 CPU 时间为代价节省空间通常是一种很好的优化,但正确的类型选择仍然很重要。
尽管类型选择对于优化以外的事情最重要:正确的类型可以更好地为您的数据建模,这应该是您的首要任务。
| 归档时间: |
|
| 查看次数: |
4271 次 |
| 最近记录: |