diff --git a/system-variables.md b/system-variables.md index 07c20abe665f..732fde62116f 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3879,6 +3879,17 @@ mysql> desc select count(distinct a) from test.t; - 这个变量用来控制 TiDB Join Reorder 算法的选择。当参与 Join Reorder 的节点个数大于该阈值时,TiDB 选择贪心算法,小于该阈值时 TiDB 选择动态规划 (dynamic programming) 算法。 - 目前对于 OLTP 的查询,推荐保持默认值。对于 OLAP 的查询,推荐将变量值设为 10~15 来获得 AP 场景下更好的连接顺序。 +### `tidb_opt_join_reorder_through_sel` 从 v8.5.6 和 v9.0.0 版本开始引入 + +- 作用域: SESSION | GLOBAL +- 是否持久化到集群:是 +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:是 +- 类型:布尔型 +- 默认值:`OFF` +- 该变量用于提升部分多表 JOIN 查询的连接顺序优化 (Join Reorder) 效果。当该变量值为 `ON` 时,在满足安全条件的前提下,优化器会将多个连续 JOIN 之间的过滤条件 (`Selection`) 一并纳入连接顺序优化的候选范围。在重建 JOIN 树时,优化器会将这些条件下推至更合适的位置,从而使更多表参与连接顺序优化。 +- 如果开启后出现性能回退或执行计划不稳定,建议将该变量设置为 `OFF` 关闭该变量。 +- 对于包含非确定性函数或具有副作用的过滤条件(例如 `rand()`),即使开启该变量,优化器也不会执行上述改写操作,以保证表达式的求值语义保持不变。 + ### `tidb_opt_limit_push_down_threshold` - 作用域:SESSION | GLOBAL