MySQL 8.3 Release Notes
要调整 InnoDB 表的查询,请在每个表上创建适当的索引集。请参阅 第 10.3.1 节,“MySQL 如何使用索引” 了解详细信息。遵循以下 InnoDB 索引指南:
-
因为每个 InnoDB 表都有一个 主键(无论您是否请求),请为每个表指定一组主键列,这些列用于最重要和时间关键的查询。
-
不要在主键中指定太多或太长的列,因为这些列值将在每个次要索引中被复制。当索引包含不必要的数据时,读取这些数据的 I/O 和缓存它们的内存将减少服务器的性能和可扩展性。
-
不要为每个列创建单独的 次要索引,因为每个查询只能使用一个索引。在很少测试的列或只有少数不同值的列上创建索引可能对任何查询都没有帮助。如果您有许多查询同一个表,测试不同的列组合,请尝试创建少数的 连接索引,而不是大量的单列索引。如果索引包含结果集所需的所有列(称为 覆盖索引),查询可能可以完全避免读取表数据。
-
如果索引列不能包含任何
NULL
值,请在创建表时将其声明为NOT NULL
。优化器可以更好地确定哪个索引对查询最有效,when it knows whether each column containsNULL
values。 -
您可以使用 第 10.5.3 节,“InnoDB 只读事务优化” 中的技术来优化单查询事务 для InnoDB 表。