SHOW [GLOBAL|SESSION] BINDINGS
SHOW BINDINGS 语句用于显示创建过的 SQL 绑定的相关信息。BINDING 语句可以在 GLOBAL 或者 SESSION 作用域内显示执行计划绑定。在不指定作用域时,默认的作用域为 SESSION。
语法图
ShowStmt:

ShowTargetFilterable:

GlobalScope:

ShowLikeOrWhereOpt

语法说明
1. SHOW [GLOBAL | SESSION] BINDINGS [ShowLikeOrWhereOpt];
该语句会输出 GLOBAL 或者 SESSION 作用域内的执行计划绑定,在不指定作用域时默认作用域为 SESSION。目前 SHOW BINDINGS 会输出 8 列,具体如下:
| 列名 | 说明 |
|---|---|
| original_sql | 参数化后的原始 SQL |
| bind_sql | 带 Hint 的绑定 SQL |
| default_db | 默认数据库名 |
| status | 状态,包括 using(正在使用)、deleted(已删除)、 invalid(无效)、rejected(演进时被拒绝)和 pending verify(等待演进验证) |
| create_time | 创建时间 |
| update_time | 更新时间 |
| charset | 字符集 |
| collation | 排序规则 |
| source | 创建方式,包括 manual (由 create [global] binding 生成)、capture(由 tidb 自动创建生成)和 evolve (由 tidb 自动演进生成) |
示例
1. CREATE TABLE t1 (
2. -> id INT NOT NULL PRIMARY KEY auto_increment,
3. -> b INT NOT NULL,
4. -> pad VARBINARY(255),
5. -> INDEX(b)
6. -> );
7. Query OK, 0 rows affected (0.07 sec)
9. INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM dual;
10. Query OK, 1 row affected (0.01 sec)
11. Records: 1 Duplicates: 0 Warnings: 0
13. INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;
14. Query OK, 1 row affected (0.00 sec)
15. Records: 1 Duplicates: 0 Warnings: 0
17. INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;
18. Query OK, 8 rows affected (0.00 sec)
19. Records: 8 Duplicates: 0 Warnings: 0
21. INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;
22. Query OK, 1000 rows affected (0.04 sec)
23. Records: 1000 Duplicates: 0 Warnings: 0
25. INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;
26. Query OK, 100000 rows affected (1.74 sec)
27. Records: 100000 Duplicates: 0 Warnings: 0
29. INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;
30. Query OK, 100000 rows affected (2.15 sec)
31. Records: 100000 Duplicates: 0 Warnings: 0
33. INSERT INTO t1 SELECT NULL, FLOOR(RAND()*1000), RANDOM_BYTES(255) FROM t1 a JOIN t1 b JOIN t1 c LIMIT 100000;
34. Query OK, 100000 rows affected (2.64 sec)
35. Records: 100000 Duplicates: 0 Warnings: 0
37. SELECT SLEEP(1);
38. +----------+
39. | SLEEP(1) |
40. +----------+
41. | 0 |
42. +----------+
43. 1 row in set (1.00 sec)
45. ANALYZE TABLE t1;
46. Query OK, 0 rows affected (1.33 sec)
48. EXPLAIN ANALYZE SELECT * FROM t1 WHERE b = 123;
49. +-------------------------------+---------+---------+-----------+----------------------+---------------------------------------------------------------------------+-----------------------------------+----------------+------+
50. | id | estRows | actRows | task | access object | execution info | operator info | memory | disk |
51. +-------------------------------+---------+---------+-----------+----------------------+---------------------------------------------------------------------------+-----------------------------------+----------------+------+
52. | 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 |
53. | ├─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 |
54. | └─TableRowIDScan_9(Probe) | 583.00 | 297 | cop[tikv] | table:t1 | time:12ms, loops:4 | keep order:false | N/A | N/A |
55. +-------------------------------+---------+---------+-----------+----------------------+---------------------------------------------------------------------------+-----------------------------------+----------------+------+
56. 3 rows in set (0.02 sec)
58. CREATE SESSION BINDING FOR
59. -> SELECT * FROM t1 WHERE b = 123
60. -> USING
61. -> SELECT * FROM t1 IGNORE INDEX (b) WHERE b = 123;
62. Query OK, 0 rows affected (0.00 sec)
64. EXPLAIN ANALYZE SELECT * FROM t1 WHERE b = 123;
65. +-------------------------+-----------+---------+-----------+---------------+--------------------------------------------------------------------------------+--------------------+---------------+------+
66. | id | estRows | actRows | task | access object | execution info | operator info | memory | disk |
67. +-------------------------+-----------+---------+-----------+---------------+--------------------------------------------------------------------------------+--------------------+---------------+------+
68. | 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 |
69. | └─Selection_6 | 583.00 | 297 | cop[tikv] | | time:224ms, loops:298 | eq(test.t1.b, 123) | N/A | N/A |
70. | └─TableFullScan_5 | 301010.00 | 301010 | cop[tikv] | table:t1 | time:220ms, loops:298 | keep order:false | N/A | N/A |
71. +-------------------------+-----------+---------+-----------+---------------+--------------------------------------------------------------------------------+--------------------+---------------+------+
72. 3 rows in set (0.22 sec)
74. SHOW SESSION BINDINGS\G
75. *************************** 1. row ***************************
76. Original_sql: select * from t1 where b = ?
77. Bind_sql: SELECT * FROM t1 IGNORE INDEX (b) WHERE b = 123
78. Default_db: test
79. Status: using
80. Create_time: 2020-05-22 14:38:03.456
81. Update_time: 2020-05-22 14:38:03.456
82. Charset: utf8mb4
83. Collation: utf8mb4_0900_ai_ci
84. 1 row in set (0.00 sec)
MySQL 兼容性
SHOW [GLOBAL|SESSION] BINDINGS 语句是 TiDB 对 MySQL 语法的扩展。
