8.5.6 Optimizing InnoDB Queries 优化InnoDB 查询
调整 InnoDB 表的查询,创建一个合适的索引在每个表上 See Section 8.3.1, “How MySQL Uses Indexes” for details.
遵循下面的InnoDB 索引指南:
因为每个InnoDB 表有一个primary key(无论你要求一个还是没有),
指定一个主键为每一个表,列是最常使用的:
不要指定很多或者很长的列在主键里,因为那些列是重复的在每个secondary index.
当一个index 包含不需要的数据,I/O 读取数据和缓存到cache 降低了服务器的性能和可扩展性
不要为每个列创建一个单独的索引,因为每个查询只能使用一个索引。
Indexes 在很少的列或者列只有很少的不同的值肯呢过对于任何查询都没有帮助。
如果你有很多的查询在同一个表上,测试不同的列的组合,试着创建一个小的组合索引相比一个大的单列索引
如果一个索引包含所有的列,查询不能避免读取表数据
如果一个索引的列不能包含任何的NULL值, 定义为NOT NULL 当你创建表的时候。
优化器可以更好的确定 哪个索引是最有效的对于一个查询, 它知道每个列是否包含NULL值
在MySQL 5.6.4或者更高版本, 你可以优化单个查询事务,使用echnique in Section 8.5.3, “Optimizing InnoDB Read-Only
Transactions”.
If you often have recurring queries for tables that are not updated frequently, enable the query cache:
[mysqld]
query_cache_type = 1
query_cache_size = 10M