DROP [GLOBAL|SESSION] BINDING
DROP BINDING 语句用于删除指定的 SQL 绑定。绑定可用于将优化器 Hint 插入语句中,而无需更改底层查询。
BINDING 语句可以在 GLOBAL 或者 SESSION 作用域内删除执行计划绑定。在不指定作用域时,默认的作用域为 SESSION。
语法图
DropBindingStmt ::='DROP' GlobalScope 'BINDING' 'FOR' BindableStmt ( 'USING' BindableStmt )?GlobalScope ::=( 'GLOBAL' | 'SESSION' )?BindableStmt ::=( SelectStmt | UpdateStmt | InsertIntoStmt | ReplaceIntoStmt | DeleteStmt )
示例
CREATE TABLE t1 (-> id INT NOT NULL PRIMARY KEY auto_increment,-> b INT NOT NULL,-> pad VARBINARY(255),-> INDEX(b)-> );Query OK, 0 rows affected (0.07 sec)INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM dual;Query OK, 1 row affected (0.01 sec)Records: 1 Duplicates: 0 Warnings: 0INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;Query OK, 1 row affected (0.00 sec)Records: 1 Duplicates: 0 Warnings: 0INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;Query OK, 8 rows affected (0.00 sec)Records: 8 Duplicates: 0 Warnings: 0INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;Query OK, 1000 rows affected (0.04 sec)Records: 1000 Duplicates: 0 Warnings: 0INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;Query OK, 100000 rows affected (1.74 sec)Records: 100000 Duplicates: 0 Warnings: 0INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;Query OK, 100000 rows affected (2.15 sec)Records: 100000 Duplicates: 0 Warnings: 0INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;Query OK, 100000 rows affected (2.64 sec)Records: 100000 Duplicates: 0 Warnings: 0SELECT SLEEP(1);+----------+| SLEEP(1) |+----------+| 0 |+----------+1 row in set (1.00 sec)ANALYZE TABLE t1;Query OK, 0 rows affected (1.33 sec)EXPLAIN ANALYZE SELECT * FROM t1 WHERE b = 123;+-------------------------------+---------+---------+-----------+----------------------+---------------------------------------------------------------------------+-----------------------------------+----------------+------+| id | estRows | actRows | task | access object | execution info | operator info | memory | disk |+-------------------------------+---------+---------+-----------+----------------------+---------------------------------------------------------------------------+-----------------------------------+----------------+------+| IndexLookUp_10 | 583.00 | 297 | root | | time:10.545072ms, loops:2, rpc num: 1, rpc time:398.359µs, proc keys:297 | | 109.1484375 KB | N/A || ├─IndexRangeScan_8(Build) | 583.00 | 297 | cop[tikv] | table:t1, index:b(b) | time:0s, loops:4 | range:[123,123], keep order:false | N/A | N/A || └─TableRowIDScan_9(Probe) | 583.00 | 297 | cop[tikv] | table:t1 | time:12ms, loops:4 | keep order:false | N/A | N/A |+-------------------------------+---------+---------+-----------+----------------------+---------------------------------------------------------------------------+-----------------------------------+----------------+------+3 rows in set (0.02 sec)CREATE SESSION BINDING FOR-> SELECT * FROM t1 WHERE b = 123-> USING-> SELECT * FROM t1 IGNORE INDEX (b) WHERE b = 123;Query OK, 0 rows affected (0.00 sec)EXPLAIN ANALYZE SELECT * FROM t1 WHERE b = 123;+-------------------------+-----------+---------+-----------+---------------+--------------------------------------------------------------------------------+--------------------+---------------+------+| id | estRows | actRows | task | access object | execution info | operator info | memory | disk |+-------------------------+-----------+---------+-----------+---------------+--------------------------------------------------------------------------------+--------------------+---------------+------+| TableReader_7 | 583.00 | 297 | root | | time:222.32506ms, loops:2, rpc num: 1, rpc time:222.078952ms, proc keys:301010 | data:Selection_6 | 88.6640625 KB | N/A || └─Selection_6 | 583.00 | 297 | cop[tikv] | | time:224ms, loops:298 | eq(test.t1.b, 123) | N/A | N/A || └─TableFullScan_5 | 301010.00 | 301010 | cop[tikv] | table:t1 | time:220ms, loops:298 | keep order:false | N/A | N/A |+-------------------------+-----------+---------+-----------+---------------+--------------------------------------------------------------------------------+--------------------+---------------+------+3 rows in set (0.22 sec)SHOW SESSION BINDINGS\G*************************** 1. row ***************************Original_sql: select * from t1 where b = ?Bind_sql: SELECT * FROM t1 IGNORE INDEX (b) WHERE b = 123Default_db: testStatus: usingCreate_time: 2020-05-22 14:38:03.456Update_time: 2020-05-22 14:38:03.456Charset: utf8mb4Collation: utf8mb4_0900_ai_ci1 row in set (0.00 sec)DROP SESSION BINDING FOR SELECT * FROM t1 WHERE b = 123;Query OK, 0 rows affected (0.00 sec)EXPLAIN ANALYZE SELECT * FROM t1 WHERE b = 123;+-------------------------------+---------+---------+-----------+----------------------+-------------------------------------------------------------------------+-----------------------------------+----------------+------+| id | estRows | actRows | task | access object | execution info | operator info | memory | disk |+-------------------------------+---------+---------+-----------+----------------------+-------------------------------------------------------------------------+-----------------------------------+----------------+------+| IndexLookUp_10 | 583.00 | 297 | root | | time:5.31206ms, loops:2, rpc num: 1, rpc time:665.927µs, proc keys:297 | | 109.1484375 KB | N/A || ├─IndexRangeScan_8(Build) | 583.00 | 297 | cop[tikv] | table:t1, index:b(b) | time:0s, loops:4 | range:[123,123], keep order:false | N/A | N/A || └─TableRowIDScan_9(Probe) | 583.00 | 297 | cop[tikv] | table:t1 | time:0s, loops:4 | keep order:false | N/A | N/A |+-------------------------------+---------+---------+-----------+----------------------+-------------------------------------------------------------------------+-----------------------------------+----------------+------+3 rows in set (0.01 sec)SHOW SESSION BINDINGS\GEmpty set (0.00 sec)
MySQL 兼容性
DROP [GLOBAL|SESSION] BINDING 语句是 TiDB 对 MySQL 语法的扩展。