最佳优化取决于您运行的查询,而不是您的表结构。
如果你想使用分区,这可能是一个很好的优化,如果分区方案支持你需要优化的查询。例如,您可以按美国各州进行分区,这将有助于查询特定州的数据。MySQL 支持“分区修剪”,因此查询只会针对特定分区运行——但前提是您的查询提到了您用作分区键的列的特定值。
您可以随时使用 EXPLAIN PARTITIONS 检查分区修剪是否有效:
EXPLAIN PARTITIONS
SELECT ... FROM MyTable WHERE state = 'NY';
那应该报告查询使用单个分区。
然而,例如,如果您需要按日期运行查询,那么分区将无济于事;MySQL 将不得不对所有 50 个分区重复查询。
EXPLAIN PARTITIONS
SELECT ... FROM MyTable WHERE date > '2013-05-01';
那将列出所有分区。查询所有分区会有一些开销,所以如果这是您的典型查询,您可能应该使用按日期进行范围分区。
所以选择你的分区键时要考虑到查询。
任何其他优化技术都遵循类似的模式——它有助于某些查询,可能对其他查询不利。因此,在决定优化方法之前,请确保您知道需要优化哪些查询。
回复您的评论:
当然有很多数据库有 4000 万行或更多,但性能很好。他们使用不同的方法,包括(无特定顺序):
我上面的观点是,在您知道需要优化的查询之前,您无法选择最佳优化方法。 此外,对于不同的查询,最佳选择可能会有所不同,甚至可能随着数据或流量的增长而随时间而变化。优化是一个持续的过程,因为在您看到数据如何增长以及数据库接收的查询流量之前,您不会知道瓶颈在哪里。