TiDB 专有函数
以下函数是 TiDB 的扩展,在 MySQL 中不存在:
函数名 | 函数描述 |
---|---|
CURRENT_RESOURCE_GROUP() | 返回当前会话绑定的资源组名称。参见 使用资源管控实现资源组限制与流控。 |
TIDB_BOUNDED_STALENESS() | 指示 TiDB 在指定的时间范围内读取最新的数据。参见 使用 AS OF TIMESTAMP 子句读取历史数据。 |
TIDB_CURRENT_TSO() | 返回当前 TiDB 的 TimeStamp Oracle (TSO)。 |
TIDB_DECODE_BINARY_PLAN() | 解码二进制执行计划。 |
TIDB_DECODE_KEY() | 将 TiDB 编码的 key 条目解码为包含 _tidb_rowid 和 table_id 的 JSON 结构。这些编码的 key 可在部分系统表和日志输出中找到。 |
TIDB_DECODE_PLAN() | 解码 TiDB 执行计划。 |
TIDB_DECODE_SQL_DIGESTS() | 查询集群中一组 SQL digest 对应的标准化 SQL 语句(无格式和参数的形式)。 |
TIDB_ENCODE_INDEX_KEY() | 编码索引 key。 |
TIDB_ENCODE_RECORD_KEY() | 编码记录 key。 |
TIDB_ENCODE_SQL_DIGEST() | 获取查询字符串的 digest。 |
TIDB_IS_DDL_OWNER() | 检查你所连接的 TiDB 实例是否为 DDL Owner。DDL Owner 是负责代表集群中所有其他节点执行 DDL 语句的 TiDB 实例。 |
TIDB_PARSE_TSO() | 从 TiDB TSO 时间戳中提取物理时间戳。参见:tidb_current_ts 。 |
TIDB_MVCC_INFO() | 返回 key 的 MVCC(多版本并发控制) 信息。 |
TIDB_PARSE_TSO_LOGICAL() | 从 TiDB TSO 时间戳中提取逻辑时间戳。 |
TIDB_ROW_CHECKSUM() | 查询行的校验和值。该函数只能在 FastPlan 流程中的 SELECT 语句中使用。即,你可以通过 SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id = ? 或 SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id IN (?, ?, ...) 这类语句进行查询。参见:单行数据的数据完整性校验。 |
TIDB_SHARD() | 创建分片索引以分散索引热点。分片索引是以 TIDB_SHARD 函数为前缀的表达式索引。 |
TIDB_VERSION() | 返回带有额外构建信息的 TiDB 版本。 |
VITESS_HASH() | 返回数字的哈希值。该函数兼容 Vitess 的 HASH 函数,旨在帮助从 Vitess 迁移数据。 |
CURRENT_RESOURCE_GROUP
CURRENT_RESOURCE_GROUP()
函数用于显示当前会话绑定的资源组名称。当启用 资源管控 功能时,SQL 语句可用的资源会受到所绑定资源组的资源配额限制。
当会话建立时,TiDB 默认将会话绑定到登录用户所绑定的资源组。如果用户未绑定任何资源组,则会话绑定到 default
资源组。会话建立后,默认情况下绑定的资源组不会改变,即使通过 修改用户绑定的资源组 更改了用户的资源组。要更改当前会话绑定的资源组,可以使用 SET RESOURCE GROUP
。
示例:
创建用户 user1
,创建两个资源组 rg1
和 rg2
,并将用户 user1
绑定到资源组 rg1
:
CREATE USER 'user1';
CREATE RESOURCE GROUP rg1 RU_PER_SEC = 1000;
CREATE RESOURCE GROUP rg2 RU_PER_SEC = 2000;
ALTER USER 'user1' RESOURCE GROUP `rg1`;
使用 user1
登录并查看当前用户绑定的资源组:
SELECT CURRENT_RESOURCE_GROUP();
+--------------------------+
| CURRENT_RESOURCE_GROUP() |
+--------------------------+
| rg1 |
+--------------------------+
1 row in set (0.00 sec)
执行 SET RESOURCE GROUP
将当前会话的资源组设置为 rg2
,然后查看当前用户绑定的资源组:
SET RESOURCE GROUP `rg2`;
SELECT CURRENT_RESOURCE_GROUP();
+--------------------------+
| CURRENT_RESOURCE_GROUP() |
+--------------------------+
| rg2 |
+--------------------------+
1 row in set (0.00 sec)
TIDB_BOUNDED_STALENESS
TIDB_BOUNDED_STALENESS()
函数作为 AS OF TIMESTAMP
语法的一部分使用。
TIDB_CURRENT_TSO
TIDB_CURRENT_TSO()
函数返回当前事务的 TSO。这与 tidb_current_ts
系统变量类似。
BEGIN;
Query OK, 0 rows affected (0.00 sec)
SELECT TIDB_CURRENT_TSO();
+--------------------+
| TIDB_CURRENT_TSO() |
+--------------------+
| 450456244814610433 |
+--------------------+
1 row in set (0.00 sec)
SELECT @@tidb_current_ts;
+--------------------+
| @@tidb_current_ts |
+--------------------+
| 450456244814610433 |
+--------------------+
1 row in set (0.00 sec)
TIDB_DECODE_BINARY_PLAN
TIDB_DECODE_BINARY_PLAN(binary_plan)
函数用于解码二进制执行计划,例如 STATEMENTS_SUMMARY
表中的 BINARY_PLAN
列。
要使二进制执行计划可用,必须将 tidb_generate_binary_plan
变量设置为 ON
。
示例:
SELECT BINARY_PLAN,TIDB_DECODE_BINARY_PLAN(BINARY_PLAN) FROM information_schema.STATEMENTS_SUMMARY LIMIT 1\G
*************************** 1. row ***************************
BINARY_PLAN: lQLwPgqQAgoMUHJvamVjdGlvbl8zEngKDk1lbVRhYmxlU2Nhbl80KQAAAAAAiMNAMAM4AUABSioKKAoSaW5mb3JtYQU00HNjaGVtYRISU1RBVEVNRU5UU19TVU1NQVJZWhV0aW1lOjI5LjPCtXMsIGxvb3BzOjJw////CQIEAXgJCBD///8BIQFnDOCb+EA6cQCQUjlDb2x1bW4jOTIsIHRpZGJfZGVjb2RlX2JpbmFyeV9wbGFuKBUjCCktPg0MEDEwM1oWBYAIMTA4NoEAeGINQ29uY3VycmVuY3k6NXDIZXj///////////8BGAE=
TIDB_DECODE_BINARY_PLAN(BINARY_PLAN):
| id | estRows | estCost | actRows | task | access object | execution info | operator info | memory | disk |
| Projection_3 | 10000.00 | 100798.00 | 3 | root | | time:108.3µs, loops:2, Concurrency:5 | Column#92, tidb_decode_binary_plan(Column#92)->Column#103 | 12.7 KB | N/A |
| └─MemTableScan_4 | 10000.00 | 0.00 | 3 | root | table:STATEMENTS_SUMMARY | time:29.3µs, loops:2 | | N/A | N/A |
1 row in set (0.00 sec)
TIDB_DECODE_KEY
TIDB_DECODE_KEY()
函数将 TiDB 编码的 key 条目解码为包含 _tidb_rowid
和 table_id
的 JSON 结构。这些编码的 key 存在于部分系统表和日志输出中。
在以下示例中,表 t1
有一个由 TiDB 生成的隐藏 rowid
。在语句中使用了 TIDB_DECODE_KEY()
函数。从结果可以看到,隐藏的 rowid
被解码并输出,这是非聚簇主键的典型结果。
SELECT START_KEY, TIDB_DECODE_KEY(START_KEY) FROM information_schema.tikv_region_status WHERE table_name='t1' AND REGION_ID=2\G
*************************** 1. row ***************************
START_KEY: 7480000000000000FF3B5F728000000000FF1DE3F10000000000FA
TIDB_DECODE_KEY(START_KEY): {"_tidb_rowid":1958897,"table_id":"59"}
1 row in set (0.00 sec)
在以下示例中,表 t2
有一个复合聚簇主键。从 JSON 输出可以看到 handle
,其中包含主键中各列的名称和值。
SHOW CREATE TABLE t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`id` binary(36) NOT NULL,
`a` tinyint unsigned NOT NULL,
`v` varchar(512) DEFAULT NULL,
PRIMARY KEY (`a`,`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
1 row in set (0.001 sec)
SELECT * FROM information_schema.tikv_region_status WHERE table_name='t2' LIMIT 1\G
*************************** 1. row ***************************
REGION_ID: 48
START_KEY: 7480000000000000FF3E5F720400000000FF0000000601633430FF3338646232FF2D64FF3531632D3131FF65FF622D386337352DFFFF3830653635303138FFFF61396265000000FF00FB000000000000F9
END_KEY:
TABLE_ID: 62
DB_NAME: test
TABLE_NAME: t2
IS_INDEX: 0
INDEX_ID: NULL
INDEX_NAME: NULL
EPOCH_CONF_VER: 1
EPOCH_VERSION: 38
WRITTEN_BYTES: 0
READ_BYTES: 0
APPROXIMATE_SIZE: 136
APPROXIMATE_KEYS: 479905
REPLICATIONSTATUS_STATE: NULL
REPLICATIONSTATUS_STATEID: NULL
1 row in set (0.005 sec)
SELECT tidb_decode_key('7480000000000000FF3E5F720400000000FF0000000601633430FF3338646232FF2D64FF3531632D3131FF65FF622D386337352DFFFF3830653635303138FFFF61396265000000FF00FB000000000000F9');
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tidb_decode_key('7480000000000000FF3E5F720400000000FF0000000601633430FF3338646232FF2D64FF3531632D3131FF65FF622D386337352DFFFF3830653635303138FFFF61396265000000FF00FB000000000000F9') |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| {"handle":{"a":"6","id":"c4038db2-d51c-11eb-8c75-80e65018a9be"},"table_id":62} |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)
在以下示例中,表的第一个 Region 以仅包含表的 table_id
的 key 开头。表的最后一个 Region 以 table_id + 1
结尾。中间的 Region 有更长的 key,包含 _tidb_rowid
或 handle
。
SELECT
TABLE_NAME,
TIDB_DECODE_KEY(START_KEY),
TIDB_DECODE_KEY(END_KEY)
FROM
information_schema.TIKV_REGION_STATUS
WHERE
TABLE_NAME='stock'
AND IS_INDEX=0
ORDER BY
START_KEY;
+------------+-----------------------------------------------------------+-----------------------------------------------------------+
| TABLE_NAME | TIDB_DECODE_KEY(START_KEY) | TIDB_DECODE_KEY(END_KEY) |
+------------+-----------------------------------------------------------+-----------------------------------------------------------+
| stock | {"table_id":143} | {"handle":{"s_i_id":"32485","s_w_id":"3"},"table_id":143} |
| stock | {"handle":{"s_i_id":"32485","s_w_id":"3"},"table_id":143} | {"handle":{"s_i_id":"64964","s_w_id":"5"},"table_id":143} |
| stock | {"handle":{"s_i_id":"64964","s_w_id":"5"},"table_id":143} | {"handle":{"s_i_id":"97451","s_w_id":"7"},"table_id":143} |
| stock | {"handle":{"s_i_id":"97451","s_w_id":"7"},"table_id":143} | {"table_id":145} |
+------------+-----------------------------------------------------------+-----------------------------------------------------------+
4 rows in set (0.031 sec)
TIDB_DECODE_KEY
解码成功时返回有效的 JSON,解码失败时返回参数值本身。
TIDB_DECODE_PLAN
你可以在慢查询日志中找到编码形式的 TiDB 执行计划。TIDB_DECODE_PLAN()
函数可用于将编码的执行计划解码为可读形式。
该函数的意义在于,执行计划是在语句执行时捕获的。重新用 EXPLAIN
执行语句可能会因为数据分布和统计信息的变化而产生不同的结果。
SELECT tidb_decode_plan('8QIYMAkzMV83CQEH8E85LjA0CWRhdGE6U2VsZWN0aW9uXzYJOTYwCXRpbWU6NzEzLjHCtXMsIGxvb3BzOjIsIGNvcF90YXNrOiB7bnVtOiAxLCBtYXg6IDU2OC41wgErRHByb2Nfa2V5czogMCwgcnBjXxEpAQwFWBAgNTQ5LglZyGNvcHJfY2FjaGVfaGl0X3JhdGlvOiAwLjAwfQkzLjk5IEtCCU4vQQoxCTFfNgkxXzAJMwm2SGx0KHRlc3QudC5hLCAxMDAwMCkNuQRrdgmiAHsFbBQzMTMuOMIBmQnEDDk2MH0BUgEEGAoyCTQzXzUFVwX1oGFibGU6dCwga2VlcCBvcmRlcjpmYWxzZSwgc3RhdHM6cHNldWRvCTk2ISE2aAAIMTUzXmYA')\G
*************************** 1. row ***************************
tidb_decode_plan('8QIYMAkzMV83CQEH8E85LjA0CWRhdGE6U2VsZWN0aW9uXzYJOTYwCXRpbWU6NzEzLjHCtXMsIGxvb3BzOjIsIGNvcF90YXNrOiB7bnVtOiAxLCBtYXg6IDU2OC41wgErRHByb2Nfa2V5czogMCwgcnBjXxEpAQwFWBAgNTQ5LglZyGNvcHJfY2FjaGVfaGl0X3JhdGlvOiAwLjAwfQkzLjk5IEtCCU4vQQoxCTFfNgkxXz: id task estRows operator info actRows execution info memory disk
TableReader_7 root 319.04 data:Selection_6 960 time:713.1µs, loops:2, cop_task: {num: 1, max: 568.5µs, proc_keys: 0, rpc_num: 1, rpc_time: 549.1µs, copr_cache_hit_ratio: 0.00} 3.99 KB N/A
└─Selection_6 cop[tikv] 319.04 lt(test.t.a, 10000) 960 tikv_task:{time:313.8µs, loops:960} N/A N/A
└─TableFullScan_5 cop[tikv] 960 table:t, keep order:false, stats:pseudo 960 tikv_task:{time:153µs, loops:960} N/A N/A
TIDB_DECODE_SQL_DIGESTS
TIDB_DECODE_SQL_DIGESTS()
函数用于查询集群中一组 SQL digest 对应的标准化 SQL 语句(无格式和参数的形式)。该函数接受 1 个或 2 个参数:
digests
:字符串。该参数为 JSON 字符串数组格式,数组中的每个字符串为一个 SQL digest。stmtTruncateLength
:整数(可选)。用于限制返回结果中每条 SQL 语句的长度。如果某条 SQL 语句超过指定长度,则会被截断。0
表示长度不受限制。
该函数返回一个字符串,格式为 JSON 字符串数组。数组中的第 i 项为 digests
参数中第 i 个元素对应的标准化 SQL 语句。如果 digests
参数中的某个元素不是有效的 SQL digest,或系统无法找到对应的 SQL 语句,则返回结果中对应项为 null
。如果指定了截断长度(stmtTruncateLength > 0
),则返回结果中每条超出该长度的语句只保留前 stmtTruncateLength
个字符,并在末尾添加 "..."
表示被截断。如果 digests
参数为 NULL
,则函数返回值为 NULL
。
SET @digests = '["e6f07d43b5c21db0fbb9a31feac2dc599787763393dd5acbfad80e247eb02ad5","38b03afa5debbdf0326a014dbe5012a62c51957f1982b3093e748460f8b00821","e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"]';
SELECT TIDB_DECODE_SQL_DIGESTS(@digests);
+------------------------------------+
| TIDB_DECODE_SQL_DIGESTS(@digests) |
+------------------------------------+
| ["begin",null,"select * from `t`"] |
+------------------------------------+
1 row in set (0.00 sec)
在上述示例中,参数为包含 3 个 SQL digest 的 JSON 数组,查询结果中对应的 SQL 语句为三项。但第二个 SQL digest 无法在集群中查到对应的 SQL 语句,因此结果中第二项为 null
。
SELECT TIDB_DECODE_SQL_DIGESTS(@digests, 10);
+---------------------------------------+
| TIDB_DECODE_SQL_DIGESTS(@digests, 10) |
+---------------------------------------+
| ["begin",null,"select * f..."] |
+---------------------------------------+
1 row in set (0.01 sec)
上述调用指定了第二个参数(即截断长度)为 10,查询结果中第三条语句长度大于 10,因此只保留前 10 个字符,并在末尾添加 "..."
,表示被截断。
参见:
TIDB_ENCODE_SQL_DIGEST
TIDB_ENCODE_SQL_DIGEST(query_str)
返回查询字符串的 SQL digest。
在以下示例中可以看到,两条查询语句得到相同的 query digest,这是因为 digest 对于两者都是 select ?
。
SELECT TIDB_ENCODE_SQL_DIGEST('SELECT 1');
+------------------------------------------------------------------+
| TIDB_ENCODE_SQL_DIGEST('SELECT 1') |
+------------------------------------------------------------------+
| e1c71d1661ae46e09b7aaec1c390957f0d6260410df4e4bc71b9c8d681021471 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
SELECT TIDB_ENCODE_SQL_DIGEST('SELECT 2');
+------------------------------------------------------------------+
| TIDB_ENCODE_SQL_DIGEST('SELECT 2') |
+------------------------------------------------------------------+
| e1c71d1661ae46e09b7aaec1c390957f0d6260410df4e4bc71b9c8d681021471 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
TIDB_IS_DDL_OWNER
TIDB_IS_DDL_OWNER()
函数如果你所连接的实例为 DDL owner,则返回 1
。
SELECT TIDB_IS_DDL_OWNER();
+---------------------+
| TIDB_IS_DDL_OWNER() |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.00 sec)
TIDB_PARSE_TSO
TIDB_PARSE_TSO()
函数用于从 TiDB TSO 时间戳中提取物理时间戳。TSO(Time Stamp Oracle)是 PD(Placement Driver)为每个事务分配的单调递增时间戳。
TSO 是一个由两部分组成的数字:
- 物理时间戳
- 逻辑计数器
BEGIN;
SELECT TIDB_PARSE_TSO(@@tidb_current_ts);
ROLLBACK;
+-----------------------------------+
| TIDB_PARSE_TSO(@@tidb_current_ts) |
+-----------------------------------+
| 2021-05-26 11:33:37.776000 |
+-----------------------------------+
1 row in set (0.0012 sec)
这里 TIDB_PARSE_TSO
用于从 tidb_current_ts
会话变量中的时间戳数字提取物理时间戳。由于时间戳是按事务分配的,因此该函数在事务中运行。
TIDB_PARSE_TSO_LOGICAL
TIDB_PARSE_TSO_LOGICAL(tso)
函数返回 TSO 时间戳的逻辑部分。
SELECT TIDB_PARSE_TSO_LOGICAL(450456244814610433);
+--------------------------------------------+
| TIDB_PARSE_TSO_LOGICAL(450456244814610433) |
+--------------------------------------------+
| 1 |
+--------------------------------------------+
1 row in set (0.00 sec)
SELECT TIDB_PARSE_TSO_LOGICAL(450456244814610434);
+--------------------------------------------+
| TIDB_PARSE_TSO_LOGICAL(450456244814610434) |
+--------------------------------------------+
| 2 |
+--------------------------------------------+
1 row in set (0.00 sec)
TIDB_ROW_CHECKSUM
TIDB_ROW_CHECKSUM()
函数用于查询行的校验和值。该函数只能在 FastPlan 流程中的 SELECT
语句中使用。即,你可以通过 SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id = ?
或 SELECT TIDB_ROW_CHECKSUM() FROM t WHERE id IN (?, ?, ...)
这类语句进行查询。
要启用 TiDB 单行数据的校验和功能(由系统变量 tidb_enable_row_level_checksum
控制),可执行如下语句:
SET GLOBAL tidb_enable_row_level_checksum = ON;
该配置仅对新建会话生效,因此需要重新连接 TiDB。
创建表 t
并插入数据:
USE test;
CREATE TABLE t (id INT PRIMARY KEY, k INT, c CHAR(1));
INSERT INTO t VALUES (1, 10, 'a');
以下语句展示了如何查询表 t
中 id = 1
行的校验和值:
SELECT *, TIDB_ROW_CHECKSUM() FROM t WHERE id = 1;
输出如下:
+----+------+------+---------------------+
| id | k | c | TIDB_ROW_CHECKSUM() |
+----+------+------+---------------------+
| 1 | 10 | a | 3813955661 |
+----+------+------+---------------------+
1 row in set (0.000 sec)
TIDB_SHARD
TIDB_SHARD()
函数用于创建分片索引以分散索引热点。分片索引是以 TIDB_SHARD()
函数为前缀的表达式索引。
创建方式:
若要为索引字段
a
创建分片索引,可以使用uk((tidb_shard(a)), a))
。当唯一二级索引uk((tidb_shard(a)), a))
的索引字段a
上由于数据单调递增或递减导致出现热点时,索引前缀tidb_shard(a)
可以分散热点,从而提升集群的可扩展性。适用场景:
- 唯一二级索引上由于 key 单调递增或递减导致写入热点,且索引包含整型字段。
- SQL 语句基于二级索引所有字段进行等值查询,无论是单独的
SELECT
,还是UPDATE
、DELETE
等内部生成的查询。等值查询包括a = 1
或a IN (1, 2, ......)
两种方式。
限制:
- 不能用于不等值查询。
- 不能用于包含
OR
且最外层为AND
的查询。 - 不能用于
GROUP BY
子句。 - 不能用于
ORDER BY
子句。 - 不能用于
ON
子句。 - 不能用于
WHERE
子查询。 - 只能用于分散整型字段的唯一索引。
- 在复合索引中可能不生效。
- 不能走 FastPlan 流程,影响优化器性能。
- 不能用于准备执行计划缓存。
以下示例展示了如何使用 TIDB_SHARD()
函数。
使用
TIDB_SHARD()
函数计算 SHARD 值。以下语句展示了如何使用
TIDB_SHARD()
函数计算12373743746
的 SHARD 值:SELECT TIDB_SHARD(12373743746);SHARD 值为:
+-------------------------+ | TIDB_SHARD(12373743746) | +-------------------------+ | 184 | +-------------------------+ 1 row in set (0.00 sec)使用
TIDB_SHARD()
函数创建分片索引:CREATE TABLE test(id INT PRIMARY KEY CLUSTERED, a INT, b INT, UNIQUE KEY uk((tidb_shard(a)), a));
TIDB_VERSION
TIDB_VERSION()
函数用于获取你所连接的 TiDB 服务器的版本和构建详情。你可以在 GitHub 上报告问题时使用该函数。
SELECT TIDB_VERSION()\G
*************************** 1. row ***************************
TIDB_VERSION(): Release Version: vv8.5.2
Edition: Community
Git Commit Hash: 821e491a20fbab36604b36b647b5bae26a2c1418
Git Branch: HEAD
UTC Build Time: 2025-06-12 19:16:25
GoVersion: go1.21.10
Race Enabled: false
Check Table Before Drop: false
Store: tikv
1 row in set (0.00 sec)
VITESS_HASH
VITESS_HASH(num)
函数用于以 Vitess 的方式对数字进行哈希。该函数用于从 Vitess 迁移到 TiDB 时的数据兼容。
示例:
SELECT VITESS_HASH(123);
+---------------------+
| VITESS_HASH(123) |
+---------------------+
| 1155070131015363447 |
+---------------------+
1 row in set (0.00 sec)
TIDB_ENCODE_INDEX_KEY
编码索引 key。
CREATE TABLE t(id int PRIMARY KEY, a int, KEY `idx` (a));
Query OK, 0 rows affected (0.00 sec)
INSERT INTO t VALUES(1,1);
Query OK, 1 row affected (0.00 sec)
SELECT TIDB_ENCODE_INDEX_KEY('test', 't', 'idx', 1, 1);
+----------------------------------------------------------------------------+
| TIDB_ENCODE_INDEX_KEY('test', 't', 'idx', 1, 1) |
+----------------------------------------------------------------------------+
| 74800000000000007f5f698000000000000001038000000000000001038000000000000001 |
+----------------------------------------------------------------------------+
1 row in set (0.00 sec)
TIDB_ENCODE_RECORD_KEY
编码记录 key。
CREATE TABLE t(id int PRIMARY KEY, a int, KEY `idx` (a));
Query OK, 0 rows affected (0.00 sec)
INSERT INTO t VALUES(1,1);
Query OK, 1 row affected (0.00 sec)
SELECT TIDB_ENCODE_RECORD_KEY('test', 't', 1);
+----------------------------------------+
| TIDB_ENCODE_RECORD_KEY('test', 't', 1) |
+----------------------------------------+
| 7480000000000000845f728000000000000001 |
+----------------------------------------+
1 row in set (0.00 sec)
SELECT TIDB_DECODE_KEY('7480000000000000845f728000000000000001');
+-----------------------------------------------------------+
| TIDB_DECODE_KEY('7480000000000000845f728000000000000001') |
+-----------------------------------------------------------+
| {"id":1,"table_id":"132"} |
+-----------------------------------------------------------+
1 row in set (0.00 sec)
TIDB_MVCC_INFO
返回 key 的 MVCC(多版本并发控制) 信息。你可以使用 TIDB_ENCODE_INDEX_KEY
函数获取 key。
SELECT JSON_PRETTY(TIDB_MVCC_INFO('74800000000000007f5f698000000000000001038000000000000001038000000000000001')) AS info\G
*************************** 1. row ***************************
info: [
{
"key": "74800000000000007f5f698000000000000001038000000000000001038000000000000001",
"mvcc": {
"info": {
"values": [
{
"start_ts": 454654803134119936,
"value": "MA=="
}
],
"writes": [
{
"commit_ts": 454654803134119937,
"short_value": "MA==",
"start_ts": 454654803134119936
}
]
}
}
}
]
1 row in set (0.00 sec)