@@ -554,7 +554,45 @@ SELECT VITESS_HASH(123);
554554
555555## TIDB_ENCODE_INDEX_KEY
556556
557- 对索引键进行编码。
557+ `TIDB_ENCODE_INDEX_KEY()` 函数将指定的索引键编码为一个十六进制字符串。函数语法如下:
558+
559+ ```sql
560+ TIDB_ENCODE_INDEX_KEY(<db_name>, <table_name>, <index_name>, <index_columns>..., <handle_columns>...)
561+ ```
562+
563+ 参数说明:
564+
565+ * ` <db_name> ` :目标索引所在的数据库的名称。
566+ * ` <table_name> ` :目标索引所在的表的名称。对于分区表,可以指定分区名,例如 ` 't(p0)' ` 。
567+ * ` <index_name> ` :目标索引的名称。
568+ * ` <index_columns>... ` :索引列的值。你必须按照索引定义的顺序依次指定。对于复合索引,需指定所有索引列的值。
569+ * ` <handle_columns>... ` :该行数据对应的 handle 值。根据表的主键类型不同,handle 值的取值规则如下:
570+
571+ * 如果表没有主键,或主键为 ` NONCLUSTERED ` ,handle 值为隐藏列 ` _tidb_rowid ` 的值。
572+ * 如果表的主键为 ` CLUSTERED ` 且为单列整型,handle 值为主键列的值。
573+ * 如果表的主键为 ` CLUSTERED ` 且为复合主键或非整型 (common handle),handle 值由所有主键列的值按顺序组成。
574+
575+ 以下示例展示了在不同主键类型下,如何为复合二级索引 ` idx(c1, c2) ` 调用此函数。
576+
577+ ``` sql
578+ -- 对于没有主键或主键为 NONCLUSTERED 的表,使用 _tidb_rowid
579+ SELECT TIDB_ENCODE_INDEX_KEY(
580+ ' <db_name>' , ' <table_name>' , ' <index_name>' ,
581+ < c1> , < c2> , < _tidb_rowid>
582+ );
583+
584+ -- 对于主键为 CLUSTERED 的整型主键表(主键列为 id)
585+ SELECT TIDB_ENCODE_INDEX_KEY(
586+ ' <db_name>' , ' <table_name>' , ' <index_name>' ,
587+ < c1> , < c2> , < id>
588+ );
589+
590+ -- 对于主键为 CLUSTERED 的复合主键表(主键列为 p1, p2)
591+ SELECT TIDB_ENCODE_INDEX_KEY(
592+ ' <db_name>' , ' <table_name>' , ' <index_name>' ,
593+ < c1> , < c2> , < p1> , < p2>
594+ );
595+ ```
558596
559597``` sql
560598CREATE TABLE t (id int PRIMARY KEY , a int , KEY ` idx` (a));
@@ -565,29 +603,39 @@ Query OK, 0 rows affected (0.00 sec)
565603```
566604
567605``` sql
568- INSERT INTO t VALUES (1 ,1 );
606+ INSERT INTO t VALUES (1 ,2 );
569607```
570608
571609```
572610Query OK, 1 row affected (0.00 sec)
573611```
574612
575613``` sql
576- SELECT TIDB_ENCODE_INDEX_KEY(' test' , ' t' , ' idx' , 1 , 1 );
614+ SELECT TIDB_ENCODE_INDEX_KEY(' test' , ' t' , ' idx' , 2 , 1 );
577615```
578616
579617```
580618+----------------------------------------------------------------------------+
581- | TIDB_ENCODE_INDEX_KEY('test', 't', 'idx', 1 , 1) |
619+ | TIDB_ENCODE_INDEX_KEY('test', 't', 'idx', 2 , 1) |
582620+----------------------------------------------------------------------------+
583- | 74800000000000007f5f698000000000000001038000000000000001038000000000000001 |
621+ | 7480000000000000b45f698000000000000001038000000000000002038000000000000001 |
584622+----------------------------------------------------------------------------+
5856231 row in set (0.00 sec)
586624```
587625
588626## TIDB_ENCODE_RECORD_KEY
589627
590- 对记录键进行编码。
628+ ` TIDB_ENCODE_RECORD_KEY() ` 函数将指定的行记录键编码为一个十六进制字符串。函数语法如下:
629+
630+ ``` sql
631+ TIDB_ENCODE_RECORD_KEY(< db_name> , < table_name> , < handle_columns> ...)
632+ ```
633+
634+ 参数说明:
635+
636+ * ` <db_name> ` :目标表所在的数据库的名称。
637+ * ` <table_name> ` :目标表所在的表的名称。对于分区表,可以在 ` <table_name> ` 中指定分区名,例如 ` 't(p0)' ` 。
638+ * ` <handle_columns>... ` :该行的 handle(行键)值。handle 的具体组成取决于表的主键类型,例如是否为 ` CLUSTERED ` 、是否为 common handle、是否使用隐藏列 ` _tidb_rowid ` 。详情请参考 [ ` TIDB_ENCODE_INDEX_KEY() ` ] ( #tidb_encode_index_key ) 中 ` <handle_columns>... ` 的说明。
591639
592640``` sql
593641CREATE TABLE t (id int PRIMARY KEY , a int , KEY ` idx` (a));
@@ -598,7 +646,7 @@ Query OK, 0 rows affected (0.00 sec)
598646```
599647
600648``` sql
601- INSERT INTO t VALUES (1 ,1 );
649+ INSERT INTO t VALUES (1 ,2 );
602650```
603651
604652```
0 commit comments