8.5.6 优化 InnoDB 查询

要调整InnoDBtable 的查询,请在每个 table 上创建一组适当的索引。有关详情,请参见第 8.3.1 节“ MySQL 如何使用索引”。对于InnoDB索引,请遵循以下准则:

  • 因为每个InnoDBtable 都有一个primary key(无论您是否请求一个),所以请为每个 table 指定一组主键列,这些列用于最重要且时间紧迫的查询中。

  • 不要在主键中指定太多或太长的列,因为这些列值在每个辅助索引中都是重复的。当索引包含不必要的数据时,用于读取此数据的 I/O 和用于对其进行缓存的内存将降低服务器的性能和可伸缩性。

  • 不要为每一列创建单独的secondary index,因为每个查询只能使用一个索引。很少测试的列或只有几个不同值的列上的索引可能对任何查询都没有帮助。如果对同一张 table 有很多查询,测试不同的列组合,请尝试创建少量的concatenated indexes而不是大量的单列索引。如果索引包含结果集所需的所有列(称为covering index),则查询可能完全避免读取 table 数据。

  • 如果索引列不能包含任何NULL值,则在创建 table 时将其声明为NOT NULL。当优化器知道每一列是否包含NULL值时,它可以更好地确定哪个索引对查询最有效。

  • 您可以使用第 8.5.3 节“优化 InnoDB 只读事务”中的技术优化InnoDBtable 的单查询事务。