我有一个像这样的大表(2000 亿行):
CREATE TABLE A (
A_Id INT NOT NULL PRIMARY KEY,
A_Attribute1 VARCHAR(100) NOT NULL,
... )
Run Code Online (Sandbox Code Playgroud)
我必须添加新的布尔列 NOT NULL 并将 false 作为默认值,如下所示:
ALTER TABLE A ADD A_BitAttribute BIT NOT NULL DEFAULT 0
Run Code Online (Sandbox Code Playgroud)
而且,在未来,该列大部分时间为 0。
为了防止在 A 表中添加此列的成本,我考虑创建一个新的相关表,如下所示:
CREATE TABLE ABitAttribute (
A_Id INT NOT NULL PRIMARY KEY,
, CONSTRAINT FK_ABitAttribute_A FOREIGN KEY (A_Id) REFERENCES A (A_Id) ON DELETE CASCADE
)
Run Code Online (Sandbox Code Playgroud)
此表中的一行表示 A_Id 为 True,没有行表示 False。检索数据所需的外连接并没有让我太烦恼。
使用这种技术有什么重大缺点或违反理论吗?
编辑 :