Skip to content

Commit

Permalink
optimizer-fix-controls, explain-index-merge: add optimizer fix contro…
Browse files Browse the repository at this point in the history
…l 52869 for index merge (#17231)
  • Loading branch information
time-and-fate authored May 13, 2024
1 parent fbf081a commit 61e700c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
2 changes: 1 addition & 1 deletion explain-index-merge.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ EXPLAIN SELECT /*+ USE_INDEX_MERGE(t, idx_a, idx_b, idx_c) */ * FROM t WHERE a >
>
> - TiDB 的索引合并特性在 v5.4.0 及之后的版本默认开启,即 [`tidb_enable_index_merge`](/system-variables.md#tidb_enable_index_merge-从-v40-版本开始引入)`ON`
> - 如果查询中使用了 SQL 优化器 Hint [`USE_INDEX_MERGE`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-),无论 `tidb_enable_index_merge` 开关是否开启,都会强制使用索引合并特性。当过滤条件中有无法下推的表达式时,必须使用 Hint [`USE_INDEX_MERGE`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-) 才能开启索引合并。
> - 如果查询有除了全表扫描以外的单索引扫描方式可以选择,优化器不会自动选择索引合并,只能通过 Hint 指定使用索引合并。
> - 如果查询有除了全表扫描以外的单索引扫描方式可以选择,优化器不会自动选择索引合并,只能通过 Hint 指定使用索引合并。从 v8.1.0 开始,这个限制可以通过 [Optimizer Fix Control 52869](/optimizer-fix-controls.md#52869-从-v810-版本开始引入) 解除。解除此限制能让优化器在更多查询中自动选择索引合并,但也有可能忽略其他更好的执行计划,因此建议在解除此限制前针对实际场景进行充分测试,确保不会带来性能回退。
> - 索引合并目前无法在临时表上使用。
> - 交集型索引合并目前不会被优化器自动选择,必须使用 [`USE_INDEX_MERGE`](/optimizer-hints.md#use_index_merget1_name-idx1_name--idx2_name-) Hint 指定**表名和索引名**时才会被选择。
Expand Down
9 changes: 8 additions & 1 deletion optimizer-fix-controls.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,11 @@ SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON';
- 默认值:`1000`
- 可选值:`[0, 2147483647]`
- 此开关控制优化器进行启发式访问路径选择的阈值。当某个访问路径(如 `Index_A`)的估算行数远小于其他访问路径时(默认为 `1000` 倍),优化器会跳过代价比较直接选择 `Index_A`
- `0` 表示关闭此启发式访问路径选择策略。
- `0` 表示关闭此启发式访问路径选择策略。

### [`52869`](https://github.com/pingcap/tidb/issues/52869) <span class="version-mark">从 v8.1.0 版本开始引入</span>

- 默认值:`OFF`
- 可选值:`ON``OFF`
- 如果查询有除了全表扫描以外的单索引扫描方式可以选择,优化器不会自动选择索引合并。详情请参考[用 EXPLAIN 查看索引合并的 SQL 执行计划](/explain-index-merge.md#示例)中的**注意**部分。
- 打开此开关后,这个限制会被解除。解除此限制能让优化器在更多查询中自动选择索引合并,但也有可能忽略其他更好的执行计划,因此建议在解除此限制前针对实际场景进行充分测试,确保不会带来性能回退。

0 comments on commit 61e700c

Please sign in to comment.