目前的数据库表结构(忽略了其他不重要字段)是:
create table if not exists tb_test(
`id` bigint unsigned auto_increment comment '主键 ID',
`A1` VARCHAR(32) DEFAULT '',
`B2` INT UNSIGNED DEFAULT 0,
PRIMARY KEY(`id`),
UNIQUE KEY(`A1`),
KEY (`B2`)
);
常用的 SQL 主要是写入、查询和统计B2
字段的数量,如下:
insert ignore into tb_test(A1, B2) values('xxx', 123);
select * from tb_test where A1 = 'xxx';
select count(*) as cnt fro tb_test where B2 = 123;
现在有个问题,这个表现在破亿了,统计 B2 字段耗时有时比较长,将来肯定越来越长,暂时升级数据库配置把耗时降到可接受范围了,目前想的方案是考虑做分表。但是用A1
或者B2
字段做分表字段都不是很好。A1
做分表的话,要统计B2
的时候需要每个表都轮询一次。B2
字段做分表字段的话,要保证A1
字段的唯一性,需要插入前轮询查每一个表当前插入的值是否已经存在。
请教下各位彦祖、亦菲,有没有好的建议,不只是数据库方案,其他存储也可以接受。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.