diff --git a/optimizer-fix-controls.md b/optimizer-fix-controls.md index de8b98807d664..e79f2613bb480 100644 --- a/optimizer-fix-controls.md +++ b/optimizer-fix-controls.md @@ -26,6 +26,12 @@ SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON'; ## Optimizer Fix Controls reference +### [`33031`](https://github.com/pingcap/tidb/issues/33031) New in v8.0.0 + +- Default value: `OFF` +- Possible values: `ON`, `OFF` +- This variable controls whether to allow plan cache for partitioned tables. If it is set to `ON`, neither [Prepared statement plan cache](/sql-prepared-plan-cache.md) nor [Non-prepared statement plan cache](/sql-non-prepared-plan-cache.md) will be enabled for [partitioned tables](/partitioned-table.md). + ### [`44262`](https://github.com/pingcap/tidb/issues/44262) New in v6.5.3 and v7.2.0 - Default value: `OFF` @@ -63,4 +69,4 @@ SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON'; - Default value: `1000` - Possible values: `[0, 2147483647]` - This variable sets the threshold for the optimizer's heuristic strategy to select access paths. If the estimated rows for an access path (such as `Index_A`) is much smaller than that of other access paths (default `1000` times), the optimizer skips the cost comparison and directly selects `Index_A`. -- `0` means to disable this heuristic strategy. \ No newline at end of file +- `0` means to disable this heuristic strategy. diff --git a/partitioned-table.md b/partitioned-table.md index 9d4de51a37997..1f614f01babaa 100644 --- a/partitioned-table.md +++ b/partitioned-table.md @@ -1999,7 +1999,7 @@ mysql> explain select /*+ TIDB_INLJ(t1, t2) */ t1.* from t1, t2 where t2.code = From example 2, you can see that in `dynamic` mode, the execution plan with IndexJoin is selected when you execute the query. -Currently, neither `static` nor `dynamic` pruning mode supports prepared statements plan cache. +Currently, `static` pruning mode does not support plan cache for both prepared and non-prepared statements. #### Update statistics of partitioned tables in dynamic pruning mode diff --git a/sql-non-prepared-plan-cache.md b/sql-non-prepared-plan-cache.md index 35eb61467fd5b..1378361f75c97 100644 --- a/sql-non-prepared-plan-cache.md +++ b/sql-non-prepared-plan-cache.md @@ -87,7 +87,7 @@ Due to the preceding risks and the fact that the execution plan cache only provi - Queries that filter on columns of `JSON`, `ENUM`, `SET`, or `BIT` type are not supported, such as `SELECT * FROM t WHERE json_col = '{}'`. - Queries that filter on `NULL` values are not supported, such as `SELECT * FROM t WHERE a is NULL`. - Queries with more than 200 parameters after parameterization are not supported by default, such as `SELECT * FROM t WHERE a in (1, 2, 3, ... 201)`. Starting from v7.3.0, you can modify this limit by setting the [`44823`](/optimizer-fix-controls.md#44823-new-in-v730) fix in the [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-new-in-v653-and-v710) system variable. -- Queries that access partitioned tables, virtual columns, temporary tables, views, or memory tables are not supported, such as `SELECT * FROM INFORMATION_SCHEMA.COLUMNS`, where `COLUMNS` is a TiDB memory table. +- Queries that access virtual columns, temporary tables, views, or memory tables are not supported, such as `SELECT * FROM INFORMATION_SCHEMA.COLUMNS`, where `COLUMNS` is a TiDB memory table. - Queries with hints or bindings are not supported. - DML statements or `SELECT` statements with the `FOR UPDATE` clause are not supported by default. To remove this restriction, you can execute `SET tidb_enable_non_prepared_plan_cache_for_dml = ON`. diff --git a/sql-prepared-plan-cache.md b/sql-prepared-plan-cache.md index 38728b9a2c7ca..07786ff8d2e05 100644 --- a/sql-prepared-plan-cache.md +++ b/sql-prepared-plan-cache.md @@ -20,7 +20,7 @@ TiDB also supports execution plan caching for some non-`PREPARE` statements, sim In the current version of TiDB, if a `Prepare` statement meets any of the following conditions, the query or the plan is not cached: - The query contains SQL statements other than `SELECT`, `UPDATE`, `INSERT`, `DELETE`, `Union`, `Intersect`, and `Except`. -- The query accesses partitioned tables or temporary tables. +- The query accesses temporary tables, or a table that contains generated columns. - The query contains non-correlated sub-queries, such as `SELECT * FROM t1 WHERE t1.a > (SELECT 1 FROM t2 WHERE t2.b < 1)`. - The query contains correlated sub-queries with `PhysicalApply` operators in the execution plan, such as `SELECT * FROM t1 WHERE t1.a > (SELECT a FROM t2 WHERE t1.b > t2.b)`. - The query contains the `ignore_plan_cache` or `set_var` hint, such as `SELECT /*+ ignore_plan_cache() */ * FROM t` or `SELECT /*+ set_var(max_execution_time=1) */ * FROM t`.