我正在设计一个网站,并有一个处理大量插入的表格。每个月这个表将至少获得5000万条记录。
所以目前我使用bigint unsgined数据类型作为此表的主键。
CREATE TABLE `class`.`add_contact_details`
(
`con_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`add_id_ref` BIGINT UNSIGNED NOT NULL,
`con_name` VARCHAR(200),
`con_email` VARCHAR(200),
`con_phone` VARCHAR(200),
`con_fax` VARCHAR(200),
`con_mailbox` VARCHAR(500),
`con_status_show_email` TINYINT(1),
`con_status_show_phone` TINYINT(1),
`con_status_show_fax` TINYINT(1),
`con_status_show_mailbox` TINYINT(1),
PRIMARY KEY (`con_id`) ) ENGINE=INNODB CHARSET=latin1 COLLATE=latin1_swedish_ci;
因此,通过大量研究,我发现大多数人都担心使用BIGINT,因为它占用大量内存并且需要大量空间。
所以我发现了一篇描述替代品的文章。这是
“你可以使用组合(tinyint,int)键.minitint将从,并默认为1.如果int值即将溢出,你将tinyint的默认值更改为2,并重置int值为1.您可以创建每天运行的代码,或者创建另一个适用的计划,该计划会检查该条件并在需要时进行更改。“
所以它有道理吗?所以有没有人使用这个? 考虑性能我应该使用什么?
对此有没有替代的enterprice级别解决方案?
答案 0 :(得分:0)
BIGINT需要8个字节的存储空间,因此5000万条记录每月400 MB,这应该不是问题。
我们在一台服务器上运行几个TB的数据库(在DB2上)。
您应该考虑通过PK查询的唯一方法是在该字段上添加索引。
最好的问候
Romeo Kienzler
答案 1 :(得分:0)
坚持BIGINT
。您可以使用双键保存两到三个字节,但您确实需要付费。
where
子句要复杂得多。考虑以下两者之间的区别:
where id in (1, 2, 3, 4, 5)
和
where id_part1 = 0 and id_part2 = 1 or
id_part1 = 0 and id_part2 = 2 or
. . .
增加第一部分的步骤不是自动的,需要手动干预或触发器的开销。