在 MySQL 单表存储 500 万数据的场景下,设计高效读取方案需要从 查询优化、架构扩展、硬件调优 三个层面综合考虑。以下是具体方案,结合实际项目经验(如标易行投标服务平台)进行分析:
一、查询优化:降低单次查询开销
1. 索引优化
- 核心原则:仅为高频查询条件、排序字段、分组字段建立索引,避免过度索引。
 - 场景示例: 
- 标易行平台的“商机检索”功能,用户按行业、地区、发布时间组合筛选,建立联合索引 
(industry, region, publish_time)。 - 对“我的收藏”列表按用户 ID 分页查询,建立 
(user_id, created_time)索引,避免全表扫描。 
 - 标易行平台的“商机检索”功能,用户按行业、地区、发布时间组合筛选,建立联合索引 
 - 优化技巧: 
- 使用 
覆盖索引(索引包含查询字段)减少回表操作。 - 避免索引字段参与计算(如 
WHERE YEAR(create_time) = 2024→ 改写为范围查询)。 
 - 使用 
 
2. 分页优化
- 问题:
LIMIT 1000000, 20会扫描前 100 万行,性能极差。 - 解决方案: 
- 游标分页:记录上一页最后一条数据的 ID(或时间戳),下一页查询使用 
WHERE id > last_id LIMIT 20。SELECT * FROM tender WHERE 
 - 游标分页:记录上一页最后一条数据的 ID(或时间戳),下一页查询使用 
 
