在我们当前的项目中,它经常发生,我们需要将列扩展几个字符。从varchar(20)到varchar(30)等等。
在现实中,真正重要的有多少?这优化有多好?只允许 100 或 200 甚至 500 个字符用于正常的“输入”字段有什么影响?一封电子邮件只能有 320 个字符,所以可以 - 有一个很好的限制。但是如果我将它设置为 200,我会得到什么,因为我不希望电子邮件地址比这更长。
通常我们的表不会超过 100.000 行,最多 20 或 30 个这样的列。
我们现在使用 SQL Server 2008,但了解不同的数据库如何处理这个问题会很有趣。
如果影响非常低 - 正如我所期望的那样,这将有助于获得一些好的论据(有链接支持?)来说服我的 DBA,这种长期的偏执并不是真正必要的。
如果是的话,我是来学习的:-)
之前已经问过这个问题(在 SQL Server 2008 中使用 varchar 的速度影响),但答案不够详细,令我满意。诚然,这不是当前的问题,主要是针对我的教育。
但是,我将尝试将其作为我正在做的一些当前数据库模式工作的具体示例;
选项 A
CREATE TABLE [VMware].[TblHostSystem](
[ID] [int] IDENTITY(1,1) NOT NULL,
<snip/>
[PowerStateID] [int] NOT NULL
)
ALTER TABLE [VMware].[TblHostSystem] WITH
CHECK ADD CONSTRAINT [FK_TblHostSystem_TblPowerState]
FOREIGN KEY([PowerStateID])
REFERENCES [VMware].[TblPowerState] ([ID])
GO
CREATE TABLE [VMware].[TblPowerState](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PowerState] [varchar](50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
选项 B
CREATE TABLE [VMware].[TblHostSystem](
[ID] [int] IDENTITY(1,1) NOT NULL,
<snip/>
[PowerState] [varchar](50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
如果我选择了选项 B(正如模式的前任作者所做的那样),由于主机的功能会经常变化,这会产生什么样的流失?
一些我认为是真实的陈述,
所以我的问题是,当将第二个示例中的 …