这是问题...
考虑到192万亿条记录,我应该考虑什么?
我主要关心的是速度。
这是桌子...
CREATE TABLE `ref` (
`id` INTEGER(13) AUTO_INCREMENT DEFAULT NOT NULL,
`rel_id` INTEGER(13) NOT NULL,
`p1` INTEGER(13) NOT NULL,
`p2` INTEGER(13) DEFAULT NULL,
`p3` INTEGER(13) DEFAULT NULL,
`s` INTEGER(13) NOT NULL,
`p4` INTEGER(13) DEFAULT NULL,
`p5` INTEGER(13) DEFAULT NULL,
`p6` INTEGER(13) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY (`s`),
KEY (`rel_id`),
KEY (`p3`),
KEY (`p4`)
);
这是查询...
SELECT id, s FROM ref WHERE red_id="$rel_id" AND p3="$p3" AND p4="$p4"
SELECT rel_id, p1, p2, p3, p4, p5, p6 FROM ref WHERE id="$id"
INSERT INTO rel (rel_id, p1, p2, p3, s, p4, p5, p6)
VALUES ("$rel_id", "$p1", "$p2", "$p3", "$s", "$p4", "$p5", "$p6")
这里有一些笔记...
- 与INSERT相比,SELECT的执行频率要高得多。但是,有时我想一次添加几百条记录。
- 负载方面,数小时之内什么都没有,那么一次可能有数千个查询。
- 不要以为我可以再规范化了(需要结合使用p值)
- 整个数据库是非常相关的。
- 这将是迄今为止最大的表(下一个最大的表是约90万)
更新(08/11/2010)
有趣的是,我还有第二种选择...
而不是192万亿,我可以存储2.6 * 10 ^ 16(15个零,表示26 个万亿次)...
但是在第二种选择中,我只需要在表中存储一个bigint(18)作为索引。就这样-仅一栏。因此,我只是要检查值的存在。偶尔添加记录,从不删除它们。
所以这让我认为必须有一个比mysql更简单的存储数字的解决方案...
有了第二种选择,我应该还是选择第一种呢?
[edit]刚刚获得一些已经完成的测试的消息-使用此设置的1亿行将在0.0004秒内返回查询[/ edit]