在互联网技术圈中有一个说法:「MySQL 单表数据量大于 2000 W行,性能会明显下降」。阿里巴巴《Java 开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,推荐分库分表。所以亿级别的数据肯定不能放在单表中,如果放在单表中,就算 name 字段有索引,查询效率也不会特别高。所以我们需要采取一些特殊手段:
- 数据库分库分表:解决表数据量过大的常见方案,我们可以根据 name 使用一致性 hash 算法将数据均匀地分布到不同的库和表中,减少单一表的数据量,提高查询效率。
- 使用搜索引擎:将 name 查询字段同步到搜索引擎(如 ES),搜索引擎可以提供更高效的查询。
- 数据仓库和OLAP系统:传统的 OLTP 数据库对大数据量的查询性能可能不是特别好,这个时候我们就可以使用专门为大数据而设计的数据仓库或者 OLAP 系统。