
如何使用 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 列,可以判断查询是否回表:
对于给定的查询,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 如何判断二级索引使用后是否回表?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号