038、TiDB特性_聚簇索引和非聚簇索引

news2024/12/28 19:43:51

聚簇表

  • 表中的行数据才能出顺序与主键存储的顺序一致
  • 表的主键即为KV映射中Key的一部分
  • 通过主键访问行记录时,可以直接获取行记录
create table t( a biging primary key clustered ,b varchar(255)); # a列为主键列,聚簇列

在这里插入图片描述

  • 聚簇表(且ID为主键)
    在这里插入图片描述
    达到96M 分裂
    在这里插入图片描述
  • 创建聚簇表user
mysql> create table user(id int not null primary key clustered,name varchar(20),role varchar(20),age int ,key idxage(age));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into user values(1,'TiDB','SQL Layer',10);
Query OK, 1 row affected (0.00 sec)

mysql> insert into user values(2,'TiKV','KV Engine',20);
Query OK, 1 row affected (0.01 sec)

mysql> insert into user values(3,'PD','Manager',30);
Query OK, 1 row affected (0.00 sec)
  • 数据的KV映射关系
    在这里插入图片描述

非聚簇表

  • 表中的行数据存储顺序与主键存储的顺序不一定一致的表即为非聚簇表
  • 行数据的键由TiDB内部隐式分配的_tidb_rowid构成,而主键本质上是唯一索引
  • 通过主键访问行记录时,不可以直接获取行记录,需要先从额外存储的主键获取行的_tidb_rowid,再通过此行的_tidb_rowid获取行记录。比聚簇表多一次回表操作。
create table t( a biging primary key nonclustered ,b varchar(255)); 

在这里插入图片描述
在这里插入图片描述

查看是否为聚簇索引

  • show create table
  • show index from
mysql> show index from cluster_order;
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+-----------+
| Table         | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression | Clustered |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+-----------+
| cluster_order |          0 | PRIMARY  |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               | YES     | NULL       | YES       |
+---------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+-----------+
1 row in set (0.00 sec)
  • 查询系统表information_schema.tables 中的tidb_pk_type列
mysql> select TABLE_NAME,TIDB_PK_TYPE from information_schema.tables where table_name='cluster_order';
+---------------+--------------+
| TABLE_NAME    | TIDB_PK_TYPE |
+---------------+--------------+
| cluster_order | CLUSTERED    |
+---------------+--------------+
1 row in set (0.03 sec)

添加删除非聚簇索引

  • 支持在建表之后添加或删除非聚簇索引。关键字nonclustered 可省略不写
alter table t add primary key(b, a) nonclustered;
alter table t add primary key(b,a);
alter table t drop primary key ;
alter table t drop index 'xx';

添加删除聚簇索引

目前TiDB不支持在建表之后添加或删除聚簇索引,也不支持聚簇索引和非聚簇索引互相转换

shard_row_id_bits

  • 非聚簇表nonclustered,TiDB会使用一个隐式的自增rowid,造成写入热点。
  • shard_row_id_bits 通过调整隐式生成的_tidb_rowid的高位,从而更容易拆分不同的region来打散热点。
    • shard_row_id_bits = 4 表示16个分片
    • shard_row_id_bits = 5 表示32个分片
  • 使用shard_row_id_bits的同时,配合使用pre_split_regions. 即建表后就立即拆分成2^pre_split_regions,pre_split_regions : 提前分配的空region数量

创建一个非聚簇表,并添加shard_row_id_bits 来打散数据,并在建表后将表切分成4个Region。

create table t (c int primary key nonclustered) shard_row_id_bits=4 pre_split_region =2;

修改表的打散随机位到5

alter table t shard_row_id_bits = 5;

评判主键是否是聚簇索引

建表的时候,如果有主键,是否是聚簇表

mysql> select @@global.tidb_enable_clustered_index;
+--------------------------------------+
| @@global.tidb_enable_clustered_index |
+--------------------------------------+
| INT_ONLY                             |
+--------------------------------------+
1 row in set (0.00 sec)
表示当主键为int类型的时候,才会自动将其建立为聚簇表
  • 主键具有以下约束:

    • 唯⼀标识表中的⾏
    • 不允许 NULL
    • 每个表只允许⼀个主键
    • 如果声明的主键不是 INTEGER 数据类型,TiDB 会为表创建⾮聚簇索引
      • _tidb_rowid: ⾮聚簇索引的键
    • 如果没有声明主键,TiDB 会为表创建⼀个隐式主键
      • _tidb_rowid: 隐式键值
  • 主键聚簇索引: 表的主键即为聚簇索引,存储⼀⾏⾄少需要⼀个键值对。clusterd

  • 主键⾮聚簇索引: ⾏数据的键由隐式分配的 _tidb_rowid 构成, 主键在 _tidb_rowid 上额外再建⽴索引,存储⼀⾏⾄少需要两个键值对。non-clustered

注意:这个跟MySQL不太一样。或者说TiDB当中分的更细。

有主键(并且数据类型类型为整型)为聚簇索引,通过主键可以找到对应行 (主键简单理解为就是key)
没有主键(或者数据类型不是整型)则是非聚簇索引,需要先找到rowid,再通过rowid找到对应行。 性能比没有主键的差。

示例

/* Table t1 Clustered */
# 聚簇索引
DROP TABLE IF EXISTS test.auto_random_t1_clustered;
CREATE TABLE test.auto_random_t1_clustered (
 id bigint PRIMARY KEY AUTO_RANDOM,
 id2 bigint,
 name char(255),
 varname varchar(200));

/* Table t2 Non-Clustered */
# 虽然符合要求,但明确强制转为非聚簇索引,所以是 非聚簇索引
DROP TABLE IF EXISTS test.t2_nonclustered;
CREATE TABLE test.t2_nonclustered (
 id bigint PRIMARY KEY NONCLUSTERED,
 id2 bigint,
 name char(255),
 varname char(200));
 
/* Table t3 Non-Clustered */
# 虽然有主键,但类型不是整型。所以不是聚簇索引
DROP TABLE IF EXISTS test.t3_nonclustered;
CREATE TABLE test.t3_nonclustered (
 id varchar(32) PRIMARY KEY,
 id2 bigint,
 name char(255),
 varname char(200));


/* Table t4 Clustered */
# 是聚簇索引,虽然类型不是整型,但强制转为聚簇索引
DROP TABLE IF EXISTS test.t4_clustered;
CREATE TABLE test.t4_clustered (
 id varchar(32) PRIMARY KEY CLUSTERED,
 id2 bigint,
 name char(255),
 varname char(200));
 
/* Table t5 Clustered with no primary key */
# 非聚簇索引,因为没有主键
DROP TABLE IF EXISTS test.t5_nonclustered;
CREATE TABLE test.t5_nonclustered (
 id bigint,
 id2 bigint,
 name char(255),
 varname char(200));

/* Table t6 Non-Clustered Composite PK */
# 非聚簇索引,虽然有主键,但它的主键是复合索引,联合主键
DROP TABLE IF EXISTS test.t6_nonclustered;
CREATE TABLE test.t6_nonclustered (
 id bigint,
 id2 bigint,
 name char(255),
 varname char(200),
 PRIMARY KEY (id, id2));

/* Table t7 Clustered Composite PK */
# 聚簇索引,虽然默认情况下联合主键不是聚簇索引,但可以强制设置。
DROP TABLE IF EXISTS test.t7_clustered;
CREATE TABLE test.t7_clustered (
 id bigint,
 id2 bigint,
 name char(255),
 varname char(200),
 PRIMARY KEY (id, id2) CLUSTERED);

支持的数据对象

数据库类型tablepartitionviewindexsequenceUser FunctionProcedureTrigger
MySQL×
TiDB部分部分×××
Oracle

kv 映射原理

  • TiDB中的数据是再RocksDB中以kv键值对的方式存储的

  • 数据存储管理的基本单位为Region

    • 每一个region 默认大小为96M
    • 每一个region按照左闭右开的区间划分数据存储范围,如[ad),[dg)
    • 每一个schema都会分配一个唯一的TableID
  • 非聚簇表KV的映射规则
    KV存储中value存储真实的行数据

Key: tablePrefix{TableID}_recordPrefixSep{_Tidb_RowID}
Value: [col1, col2, col3, col4]
  • 聚簇表KV的映射规则
Key: tablePrefix{TableID}_recordPrefixSep{Col1}
Value: [col2, col3, col4]
  • 所谓聚簇就是指以某个列为基准,把拥有相同聚簇键值的所有行都存储再相同位置上的物理存储方法,在指定的聚簇中只创建一个表的聚簇结构叫做单表聚簇。

对象设计建议

  • 建表时创建非聚簇表
    • 为表添加shard_row_id_bits 和 pre_split_regions 表提示
    • 其他列保持原有设计
create table noncluster_order( id bigint(20) unsigned auto_increment not null,
code varchar(30) not null,
order_no varchar(200) not null default '',
status int(4) not null,
cancel_flag int(4) default null,
 create_time datetime default null,
primary key(id) nonclustered
 ) engine=innodb shard_row_id_bits=4 pre_split_regions =3;
  • 建表是创建聚簇表
    • 主键使用具有强随机性的列,或在使用自生成ID,使用AUTO_RANDOM
    • 准确选择列的数据类型。用整数型,避免使用字符串类型
    • 避免创建无效的索引
CREATE TABLE `cluster_order` (
  `id` bigint(20) unsigned NOT NULL AUTO_random,
  `code` varchar(30) NOT NULL,
  `order_no` varchar(200) NOT NULL DEFAULT '',
  `status` int(4) NOT NULL,
  `cancel_flag` int(4) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `create_user` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`) clustered
) ENGINE=InnoDB;

实验1:创建非聚簇表,并查看每个Region的key范围

1、创建一张非聚簇表

create table noncluster_order( id bigint(20) unsigned auto_increment not null,
code varchar(30) not null,
order_no varchar(200) not null default '',
status int(4) not null,
cancel_flag int(4) default null,
 create_time datetime default null,
primary key(id) nonclustered
 ) engine=innodb shard_row_id_bits=4 pre_split_regions =3;

2、查看表结构

mysql> show create table noncluster_order;
| noncluster_order | CREATE TABLE `noncluster_order` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(30) NOT NULL,
  `order_no` varchar(200) NOT NULL DEFAULT '',
  `status` int(4) NOT NULL,
  `cancel_flag` int(4) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`) /*T![clustered_index] NONCLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T! SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=3 */ |

3、查看每个region 的 start_key和end_key,和每个Region的written_bytes数据

mysql> show table noncluster_order regions;
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
| REGION_ID | START_KEY                  | END_KEY                    | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
|      3067 | t_69_i_1_                  | t_69_r_1152921504606846976 |      3068 |            1001 | 3068  |          0 |            27 |          0 |                    1 |                0 |
|      3069 | t_69_r_1152921504606846976 | t_69_r_2305843009213693952 |      3070 |            1001 | 3070  |          0 |             0 |          0 |                    1 |                0 |
|      3071 | t_69_r_2305843009213693952 | t_69_r_3458764513820540928 |      3072 |            1001 | 3072  |          0 |             0 |          0 |                    1 |                0 |
|      3073 | t_69_r_3458764513820540928 | t_69_r_4611686018427387904 |      3074 |            1001 | 3074  |          0 |             0 |          0 |                    1 |                0 |
|      3075 | t_69_r_4611686018427387904 | t_69_r_5764607523034234880 |      3076 |            1001 | 3076  |          0 |             0 |          0 |                    1 |                0 |
|      3077 | t_69_r_5764607523034234880 | t_69_r_6917529027641081856 |      3078 |            1001 | 3078  |          0 |             0 |          0 |                    1 |                0 |
|      3079 | t_69_r_6917529027641081856 | t_69_r_8070450532247928832 |      3080 |            1001 | 3080  |          0 |             0 |          0 |                    1 |                0 |
|      1002 | t_69_r_8070450532247928832 |                            |      1003 |            1001 | 1003  |          0 |           995 |          0 |                    1 |                0 |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
8 rows in set (0.04 sec)

4、插入10行数据

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.08 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.02 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.01 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.02 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.02 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.02 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.01 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.01 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.02 sec)

mysql> insert into noncluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 1 row affected (0.02 sec)

5、 再次查看每个region的writen_bytes 数据变化,变化的written_bytes代表数据被随机插入到不同的region上

mysql> show table noncluster_order regions;
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
| REGION_ID | START_KEY                  | END_KEY                    | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
|      3067 | t_69_i_1_                  | t_69_r_1152921504606846976 |      3068 |            1001 | 3068  |          0 |          3069 |          0 |                    1 |                0 |
|      3069 | t_69_r_1152921504606846976 | t_69_r_2305843009213693952 |      3070 |            1001 | 3070  |          0 |             0 |          0 |                    1 |                0 |
|      3071 | t_69_r_2305843009213693952 | t_69_r_3458764513820540928 |      3072 |            1001 | 3072  |          0 |           897 |          0 |                    1 |                0 |
|      3073 | t_69_r_3458764513820540928 | t_69_r_4611686018427387904 |      3074 |            1001 | 3074  |          0 |             0 |          0 |                    1 |                0 |
|      3075 | t_69_r_4611686018427387904 | t_69_r_5764607523034234880 |      3076 |            1001 | 3076  |          0 |             0 |          0 |                    1 |                0 |
|      3077 | t_69_r_5764607523034234880 | t_69_r_6917529027641081856 |      3078 |            1001 | 3078  |          0 |             0 |          0 |                    1 |                0 |
|      3079 | t_69_r_6917529027641081856 | t_69_r_8070450532247928832 |      3080 |            1001 | 3080  |          0 |             0 |          0 |                    1 |                0 |
|      1002 | t_69_r_8070450532247928832 |                            |      1003 |            1001 | 1003  |          0 |             0 |          0 |                    1 |                0 |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
8 rows in set (0.04 sec)

实验2、 创建一个聚簇索引的表并查看每个region的key的范围

CREATE TABLE cluster_order (
id bigint(20) unsigned NOT NULL AUTO_random,
code varchar(30) NOT NULL,
order_no varchar(200) NOT NULL DEFAULT ‘’,
status int(4) NOT NULL,
cancel_flag int(4) DEFAULT NULL,
create_time datetime DEFAULT NULL,
create_user varchar(32) DEFAULT NULL,
PRIMARY KEY (id) clustered
) ENGINE=InnoDB;

实验2: 创建聚簇索引的表并查看每个Region的key范围

mysql> show create table cluster_order;

| Table         | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                             
+---------------+
| cluster_order | CREATE TABLE `cluster_order` (
  `id` bigint(20) unsigned NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,
  `code` varchar(30) NOT NULL,
  `order_no` varchar(200) NOT NULL DEFAULT '',
  `status` int(4) NOT NULL,
  `cancel_flag` int(4) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `create_user` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+---------------+
1 row in set (0.01 sec)

3、查看table region的数量,和region的start_key和 end_key:

mysql> show table cluster_order regions;
+-----------+-----------+---------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
| REGION_ID | START_KEY | END_KEY | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS |
+-----------+-----------+---------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
|      1002 | t_72_     |         |      1003 |            1001 | 1003  |          0 |             0 |          0 |                    1 |                0 |
+-----------+-----------+---------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
1 row in set (0.00 sec)

4、手工分裂reghion

mysql> split table cluster_order between (0) and (9223372036854775807) regions 16;
+--------------------+----------------------+
| TOTAL_SPLIT_REGION | SCATTER_FINISH_RATIO |
+--------------------+----------------------+
|                 15 |                    1 |
+--------------------+----------------------+
1 row in set (1.64 sec)

5、查看table region的数量,和region的start_key和end_key,记录每个region的written_bytes数据

mysql> show table cluster_order regions;
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
| REGION_ID | START_KEY                  | END_KEY                    | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
|      3085 | t_72_                      | t_72_r_576460752303423487  |      3086 |            1001 | 3086  |          0 |             0 |          0 |                    1 |                0 |
|      3087 | t_72_r_576460752303423487  | t_72_r_1152921504606846974 |      3088 |            1001 | 3088  |          0 |             0 |          0 |                    1 |                0 |
|      3089 | t_72_r_1152921504606846974 | t_72_r_1729382256910270461 |      3090 |            1001 | 3090  |          0 |             0 |          0 |                    1 |                0 |
|      3091 | t_72_r_1729382256910270461 | t_72_r_2305843009213693948 |      3092 |            1001 | 3092  |          0 |             0 |          0 |                    1 |                0 |
|      3093 | t_72_r_2305843009213693948 | t_72_r_2882303761517117435 |      3094 |            1001 | 3094  |          0 |             0 |          0 |                    1 |                0 |
|      3095 | t_72_r_2882303761517117435 | t_72_r_3458764513820540922 |      3096 |            1001 | 3096  |          0 |             0 |          0 |                    1 |                0 |
|      3097 | t_72_r_3458764513820540922 | t_72_r_4035225266123964409 |      3098 |            1001 | 3098  |          0 |             0 |          0 |                    1 |                0 |
|      3099 | t_72_r_4035225266123964409 | t_72_r_4611686018427387896 |      3100 |            1001 | 3100  |          0 |             0 |          0 |                    1 |                0 |
|      3101 | t_72_r_4611686018427387896 | t_72_r_5188146770730811383 |      3102 |            1001 | 3102  |          0 |             0 |          0 |                    1 |                0 |
|      3103 | t_72_r_5188146770730811383 | t_72_r_5764607523034234870 |      3104 |            1001 | 3104  |          0 |             0 |          0 |                    1 |                0 |
|      3105 | t_72_r_5764607523034234870 | t_72_r_6341068275337658357 |      3106 |            1001 | 3106  |          0 |             0 |          0 |                    1 |                0 |
|      3107 | t_72_r_6341068275337658357 | t_72_r_6917529027641081844 |      3108 |            1001 | 3108  |          0 |             0 |          0 |                    1 |                0 |
|      3109 | t_72_r_6917529027641081844 | t_72_r_7493989779944505331 |      3110 |            1001 | 3110  |          0 |             0 |          0 |                    1 |                0 |
|      3111 | t_72_r_7493989779944505331 | t_72_r_8070450532247928818 |      3112 |            1001 | 3112  |          0 |             0 |          0 |                    1 |                0 |
|      3113 | t_72_r_8070450532247928818 | t_72_r_8646911284551352305 |      3114 |            1001 | 3114  |          0 |             0 |          0 |                    1 |                0 |
|      1002 | t_72_r_8646911284551352305 |                            |      1003 |            1001 | 1003  |          0 |          1857 |          0 |                    1 |                0 |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
16 rows in set (0.07 sec)

6、插入10行数据,每次插入5行

mysql> insert into cluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 5 rows affected (0.05 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> insert into cluster_order(code,order_no,status,create_user,create_time) values(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now()),(concat('CODE_',LPAD(round(rand()*1000),5,0)),uuid(),round((rand()*100)),concat('USERID_',LPAD(round(rand()*1000),5,0)),now());
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select count(*) from cluster_order;
+----------+
| count(*) |
+----------+
|       10 |
+----------+
1 row in set (0.03 sec)

7、再次查看每个Region的Written_bytes

mysql> show table cluster_order regions;
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
| REGION_ID | START_KEY                  | END_KEY                    | LEADER_ID | LEADER_STORE_ID | PEERS | SCATTERING | WRITTEN_BYTES | READ_BYTES | APPROXIMATE_SIZE(MB) | APPROXIMATE_KEYS |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
|      3085 | t_72_                      | t_72_r_576460752303423487  |      3086 |            1001 | 3086  |          0 |           739 |        675 |                    1 |                0 |
|      3087 | t_72_r_576460752303423487  | t_72_r_1152921504606846974 |      3088 |            1001 | 3088  |          0 |             0 |          0 |                    1 |                0 |
|      3089 | t_72_r_1152921504606846974 | t_72_r_1729382256910270461 |      3090 |            1001 | 3090  |          0 |             0 |          0 |                    1 |                0 |
|      3091 | t_72_r_1729382256910270461 | t_72_r_2305843009213693948 |      3092 |            1001 | 3092  |          0 |           739 |        675 |                    1 |                0 |
|      3093 | t_72_r_2305843009213693948 | t_72_r_2882303761517117435 |      3094 |            1001 | 3094  |          0 |             0 |          0 |                    1 |                0 |
|      3095 | t_72_r_2882303761517117435 | t_72_r_3458764513820540922 |      3096 |            1001 | 3096  |          0 |             0 |          0 |                    1 |                0 |
|      3097 | t_72_r_3458764513820540922 | t_72_r_4035225266123964409 |      3098 |            1001 | 3098  |          0 |             0 |          0 |                    1 |                0 |
|      3099 | t_72_r_4035225266123964409 | t_72_r_4611686018427387896 |      3100 |            1001 | 3100  |          0 |             0 |          0 |                    1 |                0 |
|      3101 | t_72_r_4611686018427387896 | t_72_r_5188146770730811383 |      3102 |            1001 | 3102  |          0 |             0 |          0 |                    1 |                0 |
|      3103 | t_72_r_5188146770730811383 | t_72_r_5764607523034234870 |      3104 |            1001 | 3104  |          0 |             0 |          0 |                    1 |                0 |
|      3105 | t_72_r_5764607523034234870 | t_72_r_6341068275337658357 |      3106 |            1001 | 3106  |          0 |             0 |          0 |                    1 |                0 |
|      3107 | t_72_r_6341068275337658357 | t_72_r_6917529027641081844 |      3108 |            1001 | 3108  |          0 |             0 |          0 |                    1 |                0 |
|      3109 | t_72_r_6917529027641081844 | t_72_r_7493989779944505331 |      3110 |            1001 | 3110  |          0 |             0 |          0 |                    1 |                0 |
|      3111 | t_72_r_7493989779944505331 | t_72_r_8070450532247928818 |      3112 |            1001 | 3112  |          0 |             0 |          0 |                    1 |                0 |
|      3113 | t_72_r_8070450532247928818 | t_72_r_8646911284551352305 |      3114 |            1001 | 3114  |          0 |             0 |          0 |                    1 |                0 |
|      1002 | t_72_r_8646911284551352305 |                            |      1003 |            1001 | 1003  |          0 |             0 |          0 |                    1 |                0 |
+-----------+----------------------------+----------------------------+-----------+-----------------+-------+------------+---------------+------------+----------------------+------------------+
16 rows in set (0.06 sec)

8、思考为什么只有2个region的written_bytes有变化
注意:如果一条 insert 语句插入多行,这个多行并不会受random影响,不会分散。

mysql> select id,id>>58 from cluster_order;
+----------------------+--------+
| id                   | id>>58 |
+----------------------+--------+
| 13835058055282163718 |     48 |
| 13835058055282163719 |     48 |
| 13835058055282163720 |     48 |
| 13835058055282163721 |     48 |
| 13835058055282163722 |     48 |
|  1729382256910270465 |      6 |
|  1729382256910270466 |      6 |
|  1729382256910270467 |      6 |
|  1729382256910270468 |      6 |
|  1729382256910270469 |      6 |
+----------------------+--------+
10 rows in set (0.03 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/747187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TortoiseGit 入门指南05:推送和拉取

本节所讲内容均涉及到 远端版本库。 版本库 的概念在《TortoiseGit 入门指南02:创建和克隆仓库》中提到过,它是工作目录下面的一个名为 .git 的隐藏目录,我们每一次提交、每一个分支都会保存在版本库中。这个版本库就在我们电脑上的某个文件…

windows开机启动nginx(服务方式启动)

提示:本文章介绍如何借助Windows Service Wrapper小工具,将Nginx转换为Windows服务,在服务中心配置自启动,从而在开机时windows自行启动Nginx服务 Nginx是什么 官方链接:nginx下载 Nginx 是一个高性能的HTTP和反向代理…

Kotlin基础(五):类和接口

前言 本文主要讲解类和接口,主要包括类的声明、构造器、类成员、修饰符、类的继承、接口、抽象类。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 类的声明 在 Kotlin 中,类的声明使用关键字 class。下面是一个简单的类声明的示例&…

感受C++模版的所带来的魅力

一、泛型编程思想 首先我们来看一下下面这三个函数,如果学习过了 C函数重载 和 C引用 的话,就可以知道下面这三个函数是可以共存的,而且传值会很方便 void Swap(int& left, int& right) {int temp left;left right;right temp; }…

三、Exsi安装虚拟机win10系统

Exsi安装虚拟机win10系统 1、新建虚拟机2、选择存储(直接下一步)3、自定义设置3.1 设置cpu3.2 设置内存3.3 设置硬盘3.4 设置网卡3.5 设置驱动3.6 设置BIOS 4、完成安装 1、新建虚拟机 2、选择存储(直接下一步) 3、自定义设置 3.1 设置cpu 3.2 设置内存 3.3 设置硬盘 3.4 设置…

python搭建文件服务

python -m http.server 访问8000端口,可分享或下载命令启动文件夹下文件。

美国访问学者的申请条件

作为一个富有学术活力和创新精神的国家,美国吸引着世界各地的学者前往交流和研究。对于希望成为美国访问学者的人来说,了解申请条件是至关重要的。下面知识人网小编将介绍一些常见的美国访问学者申请条件。 1. 学术背景与研究计划:作为申请者…

安全测试方法介绍(上)静态源代码审查

软件开发完成之后,我们需要进行安全验证,验证我们的软件是不是符合安全要求。软件安全测试主要有以下几个方面:确定软件的安全特性实现是否与预期设计一致的过程;有关验证软件安全等级和识别潜在安全缺陷的过程;查找软…

采集发布到WordPress网址(OneNav主题-WordPress主题)

WordPress系统的一导航主题(OneNav主题)是集网址、资源、资讯于一体的导航主题。 要将采集的数据批量自动发布到一导航主题(OneNav主题)的网址要怎么设置? 普通的文章采集器一般只能发布为wordpress文章类型&#xff…

echarts折线图横向渐变填充

这种情况,需要后端去计算,如何把不同分段的值赋予不同的颜色,然后组合成下面我们需要的格式就可以实现 drawLine1() {if (document.getElementById(s1) ! null) {var that thislet heightNum (this.porosityList.maxDepth-this.porosityLis…

网络安全—综合渗透实验

一、 实验名称 综合实验 二、 实验目的 【实验描述】 随着互联网的普及和快速发展,互联网产品多样化、迭代快的特点为一些企业赢得了机会,同样也给企业带来了众多安全问题。如网络安全、系统安全、web安全、数据安全等。 本实验模拟企业复杂网络、复…

开源代码分享(6)—考虑电动汽车可调度潜力的充电站两阶段市场投标策略(附matlab代码)

[1]詹祥澎,杨军,韩思宁等.考虑电动汽车可调度潜力的充电站两阶段市场投标策略[J].电力系统自动化,2021,45(10):86-96. 摘要:在电力市场环境下,充电站优化投标策略能降低电力成本,甚至通过售电获取收益。文中考 虑了电动汽车成为柔性储荷资源的潜力&#…

使用mongodump和mongorestore备份与恢复Mongodb数据

一、备份与恢复方案 mongodump是MongoDB官方提供的备份工具,它可以从MongoDB数据库读取数据,并生成BSON文件,mongodump适合用于备份和恢复数据量较小的MongoDB数据库, 不适用于大数据量备份。 默认情况下mongodump不获取local数据库里面的内容。mongodump仅备份数据库中的文档…

微信小程序原生button组件使用并修改样式

想使用原生button组件&#xff0c;但是想使用不同样式 <button type"default">登录</button> 注意type使用得type必须和修改时选择器样式&#xff08;button[typedefault]&#xff09;一样&#xff0c;才能对其修改样式&#xff0c;否则样式不会被修改…

ArcGIS提取路网节点

这是我学校周围的路网,数据就不分享给大家了,看教程知道有这个方法就好了 先打开编辑器,把他合并成只有一个字段的要素 然后打开高级编辑,打断相交线 保存退出,然后打开ArcCatalog 10.6, 建立网络数据集 这时候就成了带有节点的网络数据集,但这还不是我们需要的点文件,因为这…

如何创建智能合约游戏系统

区块技术的发展&#xff0c;智能合约成为了一个热门话题。智能合约是一种基于区块技术的自动化合约&#xff0c;它可以自动执行合同中规定的条款&#xff0c;从而实现去中心化的信任和价值传递。在游戏领域&#xff0c;智能合约可以让玩家在游戏中实现各种交易和交互&#xff0…

通信算法之178: 通信信道模型2

上一篇见 通信算法之159: 通信信道模型和循环/线性卷积 一. 衰减 二.多径效应--时延扩展--相干带宽 三. 时变性--多普勒扩展--相干时间 四. 频率选择性衰落&#xff0c;时间选择性衰落 小尺度衰落&#xff0c;小 五.瑞丽和莱斯信道 六循环卷积与线性卷积 线性卷积定义及计算…

1、Linux 文件与目录结构

Linux 文件 Linux 系统中一切皆文件。 Linux 目录结构 VI/VIM 编辑器 是什么 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。 VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜 色辨别语法的正确性&#xff0c;方便程序设计…

网络安全与密码学

1、网络安全威胁 破坏网络安全的一些理论方式&#xff1a; 窃听&#xff1a;窃听信息&#xff0c;在网路通信双方直接进行窃听。 插入&#xff1a;主动在网络连接中插入信息&#xff08;可以在message中插入恶意信息&#xff09; 假冒&#xff1a;伪造&#xff08;spoof&#x…

【从零开始学习CSS | 第一篇】选择器介绍

目录 前言&#xff1a; 选择器介绍&#xff1a; 各类选择器&#xff1a; 总结&#xff1a; 前言&#xff1a; 本文以及后续几篇文章我们将会集中介绍CSS中的常见选择器&#xff0c;选择器的出现可以让我们实现对具体的元素标签进行定制&#xff0c;因此我们要掌握好各类选择…