如何根据oceanbase的执行计划确定联合索引是走了所有字段还是部分字段?
explain extended 的outputs & filters里面的range_key中有索引扫描的范围
你好 能给个具体例子看吗?我看执行计划并没有range key 字眼
obclient [test]> explain extended select count(*) from gva.slowlogs_raw;
±-------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan |
±-------------------------------------------------------------------------------------------------------------------------------------+
| ===================================================================== |
| |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| |
| --------------------------------------------------------------------- |
| |0 |SCALAR GROUP BY | |1 |1572133 | |
| |1 |└─TABLE FULL SCAN|slowlogs_raw(idx_period)|49247376|679572 | |
| ===================================================================== |
Outputs & filters: |
---|
0 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*)(0x7f1ff101ed90))(0x7f1ff10a7de0)]), filter(nil), rowset=256 |
group(nil), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*)(0x7f1ff101ed90))(0x7f1ff10a7de0)]) |
1 - output([T_FUN_COUNT(*)(0x7f1ff101ed90)]), filter(nil), rowset=256 |
access(nil), partitions(p0) |
is_index_back=false, is_global_index=false, |
range_key([slowlogs_raw.period_start(0x7f1ff1087ff0)], [slowlogs_raw.id(0x7f1ff101f270)]), range(MIN,MIN ; MAX,MAX)always true |
Used Hint: |
------------------------------------- |
/*+ |
*/ |
Qb name trace: |
------------------------------------- |
stmt_id:0, stmt_type:T_EXPLAIN |
stmt_id:1, SEL$1 |
Outline Data: |
------------------------------------- |
/*+ |
BEGIN_OUTLINE_DATA |
INDEX(@“SEL$1” “gva”.“slowlogs_raw”@“SEL$1” “idx_period”) |
OPTIMIZER_FEATURES_ENABLE(‘4.2.1.0’) |
END_OUTLINE_DATA |
*/ |
上面计划中的使用了索引的全扫描,index full scan,扫描的范围是period_start和id的min到max值,也是索引的全部都需要扫描
可以参考下楼上的恢复,如果有具体问题可以发出来执行计划
谢谢亲
谢谢
1、建议发一下 explain extended 执行计划 保存在一个文本里
2、 使用obdiag收集信息
–obdiag安装文档
https://www.oceanbase.com/docs/common-obdiag-cn-1000000001491140
收集SQL性能问题信息
obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-hxx -Pxx -uxx -pxx -Dxx’, trace_id=‘xx’}”