【问题标题】:How to interpret the output of MySQL EXPLAIN?如何解释 MySQL EXPLAIN 的输出?
【发布时间】:2012-12-17 17:38:28
【问题描述】:

我想从entrytable中选择text列的内容。

EXPLAIN SELECT text
FROM entrytable
WHERE user = 'username' &&
`status` = '1' && (
    `status_spam_user` = 'no_spam'
    || (
        `status_spam_user` = 'neutral' &&
        `status_spam_system` = 'neutral'
    )
)
ORDER BY datum DESC
LIMIT 6430 , 10

该表有三个索引:

  • index_user(用户)
  • index_datum(基准)
  • index_status_mit_spam(status、status_spam_user、status_spam_system)

EXPLAIN 结果是:

id  select_type     table       type    possible_keys                       key         key_len     ref     rows    Extra
1   SIMPLE          entrytable  ref     index_user,index_status_mit_spam    index_user  32          const   7800    Using where; Using filesort
  • possible_keys 是 MySQL 可能想要使用的索引,而 keys 是 MySQL 实际使用的索引吗?
  • 为什么没有使用索引index_status_mit_spam?在查询中,列的顺序与索引中的相同,...
  • 为什么索引index_datum 不用于ORDER BY
  • 如何优化我的表索引或查询? (上面的查询最多需要 3 秒,表中有大约一百万个条目)

【问题讨论】:

    标签: mysql query-optimization explain


    【解决方案1】:

    回答您的问题:

    您需要了解索引会加快读取速度并减慢对表的写入速度。所以仅仅添加索引并不总是一个好主意。以上答案和提示应该可以帮助您获得扎实的理解。

    【讨论】:

      【解决方案2】:
      • possible_keys 表示表的所有索引(键或索引列)
      • MySQL 优化器决定执行查询的最佳方式,它可以使用任何索引(不是必需的主键),也可以不使用
      • 要强制 MySQL 使用或忽略可能的键列中列出的索引,请在查询中使用 FORCE INDEXUSE INDEXIGNORE INDEX
      • 检查此链接 - http://dev.mysql.com/doc/refman/5.1/en/index-hints.html

        您可以通过向提示添加 FOR 子句来指定索引提示的范围。这为优化器为查询处理的各个阶段选择执行计划提供了更细粒度的控制。要仅影响 MySQL 决定如何在表中查找行以及如何处理连接时使用的索引,请使用 FOR JOIN。要影响对行进行排序或分组的索引使用,请使用 FOR ORDER BY 或 FOR GROUP BY。 (但是,如果表有覆盖索引并且用于访问表,优化器将忽略禁用该索引的 IGNORE INDEX FOR {ORDER BY|GROUP BY} 提示。)

      • 尝试强制使用不同的索引 - 确定检查此链接 - MySQL `FORCE INDEX` use cases?

      • 了解 EXPLAIN 输出格式 - http://dev.mysql.com/doc/refman/5.1/en/explain-output.html

      【讨论】:

      • "possible_keys 表示表的所有索引(键或索引列)" - 不正确。它表示可能用于相关查询的索引。
      猜你喜欢
      • 2011-12-27
      • 2016-03-11
      • 1970-01-01
      • 2017-08-26
      • 2012-02-17
      • 2011-12-06
      • 2012-08-06
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多