mysql - 如何解释 MySQL EXPLAIN 的输出?

标签 mysql query-optimization explain

我想从 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_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?在查询中,列的顺序与索引中的相同,...
  • 为什么ORDER BY不使用索引index_datum
  • 如何优化我的表索引或查询? (上面的查询最多需要 3 秒,表中有大约一百万个条目)

最佳答案

回答您的问题:

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

关于mysql - 如何解释 MySQL EXPLAIN 的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137549/

相关文章:

mysql - QueryRecord 处理器在 NiFi 中执行聚合 SQL 函数

mysql连接两个相同的列

mysql - 如何在特定条件下返回 'bit'值?

php - 在 jQuery 链接上运行 SQL 查询

sql - 优化已取消订单的 SQL 查询

mysql - 使用 IN 子查询改进 MySQL 查询

mysql - 使用 OR 在 MySQL 查询中使用了错误的索引

mysql - 有问题的 SQL 实践 - 按 id 而不是创建时间排序

MySQL 子查询优化

5.0 和 5.6 上的 MySQL 查询解释效率