M A*_*ifi 6 performance sql-server-2008 varchar
之前已经问过这个问题(在 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(正如模式的前任作者所做的那样),由于主机的功能会经常变化,这会产生什么样的流失?
一些我认为是真实的陈述,
所以我的问题是,当将第二个示例中的 PowerState 从“powerOn”(20 字节)更新为“powerOff”(22 字节)时,数据库需要做什么?
希望详细了解幕后发生的事情!
第一个问题——
(MAX)
值)1 -这取决于页面是否已满。它很可能适合当前页面。行的标题记录也需要更新以更新字段的长度。
2 - 数据只会在页面级别为插入或更新重新排列,因此不会移动其他任何内容。如果它适合您当前的页面,它将,否则将有一个页面拆分。
3 - 据我所知,从来没有varchar
- 如果你想要这种行为,你可以CHAR
改为。
4 - 仅当值超过页面上的空间时。
至于设计本身...
使用id
代替 a肯定会获得更好的性能varchar
。
PK/FK
关系时,可以进行很多优化,因为引擎可以推断出有关重复/不同值等的一些元数据。 归档时间: |
|
查看次数: |
1508 次 |
最近记录: |