MySQL表真有20M行数的软限制吗?


互联网上有传言说我们应该避免在单个 MySQL 表中有超过 2000 万行。否则,表的性能会下降,当它超过软限制时,你会发现 SQL 查询比平时慢得多。这些判断是多年前对HDD做出的。我想知道 2023 年 SSD 上的 MySQL 是否仍然如此,如果是这样,那是为什么?

详细点击标题

结论:

  1. Innodb_buffer_pool 大小/表大小决定 是否会出现性能降级。
  2. 判断是否需要拆分 MySQL 表的一个更有意义的指标是查询运行时/缓冲池命中率。如果查询总是命中缓冲区,则不会有任何性能问题。20M 行只是一个基于经验的值。
  3. 除了拆表,增加innodb_buffer_pool size / database memory也是一个选择。
  4. 如果可能,请避免在生产中使用select *,这在最坏的情况下会导致 2 次索引树查找。
  5. (个人的意见)考虑到 SSD 现在越来越流行,20M 行不是 MySQL 表的有效软限制