Ale*_*ukh 5 mysql innodb index database-design index-tuning
MySQL 是否会考虑哪些索引可用,为给定查询选择执行计划,还是先选择执行计划,然后在索引可用时使用索引?
动机:我想决定哪些索引是有用的。我有一些典型的查询。所以我可以想象两种可能的策略:
我的数据库不是很大,所以我可以使用索引。我目前使用 InnoDB,但如果需要,我可以切换到 MyISAM 或其他。
MySQL 的优化器只查看哪些索引可用。
5.6 中有一个例外:如果您有一个子查询,例如
FROM ( SELECT ... ) JOIN ( SELECT ... ) ...,则创建的临时表上没有索引。这曾经导致糟糕的性能。现在,优化器将尝试各种索引,并为 tmp 表创建最好的索引。我怀疑它只查找单列索引,而不是“复合”索引
InnoDB 最近最受关注。MyISAM 没有任何技巧。
尝试我的食谱,在给定 SELECT 的情况下创建最佳索引。它可能会为您节省一些错误的开始。