登录
首页 >  数据库 >  MySQL

使用 explain 如何判断二级索引使用后是否回表?

时间:2024-11-13 11:01:20 357浏览 收藏

有志者,事竟成!如果你在学习数据库,那么本文《使用 explain 如何判断二级索引使用后是否回表?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

使用 explain 如何判断二级索引使用后是否回表?

如何使用 explain 判断二级索引使用后,是否存在回表操作?

对于给定的查询 sql:

select
    track_source_id,
    date_format(created_at, '%y-%m-%d') as day,
    count(*) as total_count,
    sum(case when len_parse_result_list = 0 then 1 else 0 end) as len_parse_result_list_zero_count,
    sum(case when len_parse_result_list is null then 1 else 0 end) as len_parse_result_list_null_count,
    sum(case when len_parse_result_list > 0 then 1 else 0 end) as len_parse_result_list_gte_zero_count
from
    keywordtask
where
    created_at >= now() - interval 30 day
group by
    track_source_id,
    day
order by
    track_source_id,
    day;

其 explain 输出:

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| --- | ----------- | ----- | ---------- | ---- | ------------- | --- | ------ | --- | ---- | -------- | ----- |
| 1   | SIMPLE      | keywordtask | NULL      | index | idx_created_at,idx_track_source_id_created_at_len_parse_result_list | idx_track_source_id_created_at_len_parse_result_list | 14 | NULL | 134324154 | 50.0 | Using where; Using index; Using temporary; Using filesort |

是否回表判断:

通过读取 extra 列,可以判断查询是否回表:

  • using index 表示索引覆盖,不需要回表。
  • using index condition 表示索引查找,不需要回表过滤。
  • using index & using where 表示索引查找,但需要回表过滤。
  • using where 表示回表查询数据。
  • 主键查询 不回表,但 extra 列无法反映。

对于给定的查询,extra 列为 using where; using index; using temporary; using filesort,表明查询使用了索引 (idx_track_source_id_created_at_len_parse_result_list),但需要回表过滤条件 created_at >= now() - interval 30 day。因此,该查询会发生回表操作。

好了,本文到此结束,带大家了解了《使用 explain 如何判断二级索引使用后是否回表?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>