每周 table 的正确结构和索引
Correct structure and index for a Weekly table
我需要一个 table 来每周为每个用户存储文本。
所以我想到了两个选择:
1)使用复合主键:
CREATE TABLE `WeeklyTxt` (
`Year` YEAR(4) NOT NULL ,
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL ,
`UserId` BIGINT NOT NULL ,
`WeekTxt` TEXT NOT NULL,
PRIMARY KEY (`Year`, `Week`, `UserId`)
) ENGINE = InnoDB;
2) 使用自增主键
CREATE TABLE `WeeklyTxt_2` (
`WeekTxtId` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Year` YEAR(4) NOT NULL ,
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL ,
`UserId` BIGINT NOT NULL ,
`WeekTxt` TEXT NOT NULL
) ENGINE = InnoDB;
我不知道什么是更好的选择(以及为什么)
这取决于您通常会在 table 中进行的搜索!
通常我会使用一个简单的主键,我会添加另一个像你的键一样的键:(Year
, Week
, UserId
)
我需要一个 table 来每周为每个用户存储文本。
所以我想到了两个选择:
1)使用复合主键:
CREATE TABLE `WeeklyTxt` (
`Year` YEAR(4) NOT NULL ,
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL ,
`UserId` BIGINT NOT NULL ,
`WeekTxt` TEXT NOT NULL,
PRIMARY KEY (`Year`, `Week`, `UserId`)
) ENGINE = InnoDB;
2) 使用自增主键
CREATE TABLE `WeeklyTxt_2` (
`WeekTxtId` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Year` YEAR(4) NOT NULL ,
`Week` ENUM('1','2','3','4', ... ,'51','52','53') NOT NULL ,
`UserId` BIGINT NOT NULL ,
`WeekTxt` TEXT NOT NULL
) ENGINE = InnoDB;
我不知道什么是更好的选择(以及为什么)
这取决于您通常会在 table 中进行的搜索!
通常我会使用一个简单的主键,我会添加另一个像你的键一样的键:(Year
, Week
, UserId
)