MySQL 8.4 Release Notes
10.5.6 优化InnoDB查询
为了对InnoDB
表进行查询优化,创建适当的索引集在每个表上。参见第10.3.1节,“MySQL如何使用索引”以获取详细信息。遵循以下指南来优化InnoDB
索引:
-
由于每个
InnoDB
表都有一个主键(无论您是否请求一个或不请求),为每个表指定一组主要的键列,这些键列在最重要和时间敏感的查询中使用。 -
不要指定太多或太长的列作为主键,因为这些列值会在每个次要索引中重复。索引包含不必要数据时,读取此数据所需的I/O以及缓存它所需的内存都会降低服务器性能和可扩展性。
-
不要为每一列创建单独的次要索引,因为每个查询只能使用一个索引。对频繁测试的列或只有一些不同值的列进行索引可能不会对任何查询有帮助。如果您对同一表有许多查询,并且测试了不同的列组合,尝试创建较少数量的连接索引而不是大量单列索引。如果一个索引包含结果集所需的所有列(即覆盖索引),查询可能会避免读取表数据。
-
如果一个索引列不能包含任何
NULL
值,请在创建表时将其声明为NOT NULL
。优化器可以更好地确定哪个索引对于查询最有效,知道每个列是否包含NULL
值。 -
您还可以通过第10.5.3节,“优化InnoDB只读事务”中的技术来优化单个查询的事务对
InnoDB
表。