关于后端:TiDBOceanBasePolarDBXCockroachDB二级索引写入性能测评

34次阅读

共计 22663 个字符,预计需要花费 57 分钟才能阅读完成。

简介:二级索引是关系型数据库相较于 NoSQL 数据库的一个要害差别。二级索引必须是强统一的,因而索引的写入须要与主键的写入放在一个事务当中,事务的性能是二级索引性能的根底。本次测试将重点关注不同分布式数据库的索引性能,特地关注业内全局索引的性能与 MySQL 索引的性能差别。为什么要做这个测试二级索引是关系型数据库相较于 NoSQL 数据库的一个要害差别。二级索引必须是强统一的,因而索引的写入须要与主键的写入放在一个事务当中,事务的性能是二级索引性能的根底。目前市面上的分布式数据库中,从应用体验的角度看支流有几种状态:以 TiDB、CockroachDB 等为代表的纯通明的用法。从体现上来看,该种类型的数据库所有表都是分布式表,并且不须要指定分区键,其外围逻辑是应用分布式事务来保护全局索引,并应用全局索引齐全代替单机数据库中的二级索引。以 OceanBase 等为代表的纯手动的用法。从体现上看,该种类型的数据库在不指定分区键的状况下,是以单表的模式存在的,不具备扩展性;创立分布式表须要应用相似分区表的语法。此类型的数据库个别也提供全局索引的能力(不提供的咱们个别称之为中间件而不是数据库)。但与第一类不同,它们个别会将全局索引作为一个可选项,由用户手动的指定与创立。此外,他们还会提供基于单机事务实现的本地索引(本地索引)。同时提供以上两种用法的 PolarDB-X。在不指定分区键的状况下,与第一类数据库相似,应用分布式表 + 全局索引来提供通明的分布式体验;也容许手动指定分区键,应用本地索引等技术晋升性能。在之前的文章中《PolarDB-X 数据分布解读(四):通明 vs 手动》,咱们提出:通明(主动)的易用性决定了分布式数据库的应用上限,但性能上是有更高的老本代价手动可能提供最优的性能,但应用门槛会有所增加分布式数据库须要为大多数场景提供可能通明应用的能力,也要为多数性能要求高的场景提供手动调优打消分布式事务的能力。这个观点的重要依据是,纯通明的模式实质上是应用分布式事务 + 全局索引来代替单机数据库中的事务 + 索引,而分布式事务 + 全局索引与单机事务 + 索引存在较大的性能差别。本次测试将重点关注不同分布式数据库的索引性能,特地关注业内全局索引的性能与 MySQL 索引的性能差别。本次测试的产品包含 TiDB、OB、PolarDB-X、CockroachDB,选取这几个数据库有以下起因:他们都提供了强统一的全局索引能力,是数据库而不是中间件。都有开源,并且都有云产品提供,历史也都比拟悠久,材料比拟多,不是 PPT 数据库,容易搞清楚外部的原理。都是次要面向 OLTP 的数据库。此外咱们也测试了 MySQL 的索引性能作为比照。测试方法因为硬件配置(比方 OB 用了 6 台机器(并且租户设置上并没有占满整个机器),TiDB 和 TiKV 用了 5 台,PolarDB- X 和 MySQL 是间接公共云购买的等)、零碎参数等等,对于每个数据库来说,不是完全相同,也不肯定是最优的,所以间接比照 TPS 是没有意义的。咱们会将每个数据库,不带索引状况下,TPS 可能达到的峰值作为基线(100%),比拟不同索引数目的性能绝对于基线的百分比。例如,产品 A 不带索引能跑到 10W 的 TPS,带一个索引跑到 5W,那咱们就认为带一个索引的状况下是基线的 50%。这个百分比咱们无妨称之为 TPS 百分比。在产品之间的横向比照中,咱们会比照雷同索引数目下的 TPS 百分比,而不是 TPS 的绝对值。在测试 TPS 百分比的时候,咱们会调整并发度,来找到可能达到最大 TPS 的并发度,并以最大的 TPS 来计算 TPS 百分比。除了 TPS 百分比之外,咱们还会测试每个产品在不同索引数目状况下,单次写入的 RT。在 RT 测试中,咱们会用单线程来进行写入。本次测试咱们只测试 insert 场景,这是索引写入的最根本的性能了。咱们应用 sysbench 的 oltp_insert.lua 制作流量。因为咱们要测试多个索引,因而咱们将 sysbench 的表构造做了批改,以 MySQL 为例,批改如下:CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL ,
    `k1` int(11) NOT NULL ,
    `k2` int(11) NOT NULL ,
    `k3` int(11) NOT NULL ,
    `k4` int(11) NOT NULL ,
    `k5` int(11) NOT NULL ,
    `k6` int(11) NOT NULL ,
    `k7` int(11) NOT NULL ,
    `k8` int(11) NOT NULL ,
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)

); 咱们在表中减少了 8 个列,依据测试的索引数目,会在这个 8 个列上创立相应数目的二级索引。同时咱们要批改 oltp_insert.lua,在 INSERT 语句中减少这 8 个列,8 个列的值随机生成,没有有序性,防止在基于 range 进行分区的数据库(TiDB、CockroachDB)上产生热点:con:query(string.format(“INSERT INTO %s (id,k,k1,k2,k3,k4,k5,k6,k7,k8,c,pad) VALUES ” ..

                             "(%d, %d,%d,%d,%d,%d,%d,%d,%d,%d,'%s','%s')",
                          table_name, i, k_val, sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),sysbench.rand.default(1, sysbench.opt.table_size),c_val, pad_val)) 因为不同数据库的语法、个性等不同(当然还有一些坑),每个数据库的建表语句可能会做一些批改,每个数据库最终应用的建表语句放在附录中。软硬件环境本次测试应用的机器应用的是阿里云上购买的 ECS,规格为 ecs.i2g.8xlarge:

操作系统为阿里云上提供的 CentOS 8.3:

所有机器均在同一个地区的同一个可用区内。所有数据库的数据文件均放在本地 SSD 中。所有数据库均会在后面挂一个 SLB 做负载平衡。sysbench 应用的是 1.0.20 版本。测试后果

咱们能够看到,这些分布式数据库实现的全局索引中,即便只有 1 个索引,性能也都会上涨到 30% 以下,在 8 个索引的状况下,性能根本都会跌倒 10% 以下。而像 MySQL 这种单机数据库,8 个索引的状况下,性能仍然放弃在 85% 以上。印证了咱们在《PolarDB-X 数据分布解读(四):通明 vs 手动》提到过的观点“分布式事务跟单机事务相比,在老本(或者说性能)上仍然存在不可逾越的鸿沟,这个差距至多在 3 倍以上”。应用全局索引代替单机数据库索引会带来很高的老本,在老本敏感型的场景中,须要适当的应用本地索引来升高应用老本。在提供了本地索引的数据库中:● PolarDB- X 和 OB 的本地索引与主键具备 Locality 上的亲和性,能应用单机事务来对索引进行写入,绝对于全局索引,放弃了十分高的性能。● TiDB 尽管提供了本地索引,但其索引和主键不具备 Locality 上的亲和性,无奈绑定到同一个机器上,因而其本地索引仍然要应用分布式事务进行保护,在性能上和全局索引没有太大差别,老本都很高。● CockroachDB 的本地索引实践上与 TiDB 的行为相似,不过 CockroachDB 的 partition 性能是商业版才提供的,这次就没有进行测试了对于 TiDB 和 CockroachDB 来说,状况就比拟难堪了,因为他们所提供的所有索引,老本都要比单机 MySQL 高很多。作为用户没有任何伎俩能打消这个代价,除非,你不必二级索引。从 RT 的角度看:单机数据库因为事务的网络交互起码,RT 体现的是最好的,并且跟索引的数量简直没有关系。分布式数据库的事务因为须要更多的跨节点交互,所以 RT 显著会比单机数据库更大。但因为分布式数据库在多分支的事务上个别都会采纳并行写入的策略,因而体现好的数据库 RT 并不会随索引数量的减少而线性减少。总体说来,RT 能够承受。CockroachDB 全局索引的 RT 体现是最差的,可能跟事务策略应用 HLC 无关,其余几个数据库应用的都是 TSO 的计划。TiDB 全局索引的 RT 体现的是最好的,0- 8 个索引 RT 简直没有变动,阐明并行优化做的十分好。自家产品 PolarDB- X 全局索引的 RT 看起来还有优化的空间,尽管上涨无限,但并没有做到齐全的并行。咱们会在后续版本进行优化。本地索引 RT 十分稳固并且低。OB 的全局索引和本地索引体现和 PolarDB- X 比拟相似,并行优化有晋升空间,本地索引体现不错。测试过程中的一个额定发现,TiDB、OB、CockroachDB 的自增主键(auto_increment/serial)都有比较严重的性能问题,都要应用随机等代替计划。TiDB 与 CockroachDB 是因为工夫序带来的热点 range 导致,OB 可能是外部的一些锁导致。兼容性包含性能兼容与性能兼容,性能兼容之路漫漫 … 上面附上每个数据库测试的状况。测试详情 MySQL 环境配置版本:5.7.14-AliSQL-X-Cluster-1.5.1.8-20201229-log 规格:32C128G,独享型阿里云购买:

测试后果

OceanBase 环境配置版本:社区版 3.1.4

租户配置:CREATE RESOURCE UNIT unit1 MAX_CPU 16, MAX_MEMORY ’32G’, MAX_IOPS 12800,MAX_DISK_SIZE ‘1000G’, MAX_SESSION_NUM 6400, MIN_CPU=8, MIN_MEMORY=’16G’, MIN_IOPS=12800;
CREATE RESOURCE POOL pool1 UNIT=’unit1′,UNIT_NUM=2,ZONE_LIST=(‘zone1′,’zone2′,’zone3’);
CREATE TENANT idx_test CHARSET=’utf8mb4′, ZONE_LIST=(‘zone1′,’zone2′,’zone3′), PRIMARY_ZONE=’zone1;zone2,zone3’, RESOURCE_POOL_LIST=(‘pool1′) ; 须要留神的几点:OB 中的表默认为单表(只散布在一个节点上),须要应用分区表的语法,指定分区键与分区数,能力成为一张分布式表 OB 默认的索引是本地索引,须要指定 Global 关键字才是全局索引 OB 的全局索引默认也是一个单表(只有一个分区,只散布在一个节点上),须要手动指定分区数才是一个真正的分布式索引 UNIT_NUM= 1 的状况下,仿佛即便是分区表,也都在同一台机器上,所以测试机器数要 >=6,确保 UNIT_NUM>=2OB 全局索引如果在建表语句中间接指定,仿佛不反对指定分区数,因而全局索引须要应用独自的 CREATE INDEX 语句来创立 OB 分区表的 AUTO_INCREMENT 属性仿佛有重大的性能问题,设置了之后,性能很低,要去掉该属性,并且将 sysbench 的 auto_inc 设为 off,由 sysbench 来生成主键值 OB 默认应用的工夫服务是本地工夫服务(LTS),这种模式下是不反对全局索引的,须要手动批改为全局工夫服务(GTS):SET GLOBAL ob_timestamp_service=’GTS’; 测试后果全局索引:

本地索引:

TiDB 环境配置版本:6.1.0 部署构造:

须要留神的点:TiDB 中语法上没有“全局索引”这个词,但从原理角度看,TiDB 任何一张表都是分布式表,任何一个二级索引都是全局索引,它没有单表的概念不要应用 AUTO_INCREMENT。TiDB 中的 AUTO_INCREMENT 尽管是分段的,不保障自增间断,但拉长工夫后仍然是有肯定工夫序的,所以会导致热点。须要应用 AUTO_RANDOM 替换 AUTO_INCREMENT。TiDB 中反对 Partition 语法,但其 Partition 仍然构建于分布式 KV 之上,意味着每个 Partition 上面都对应着一个或多个 TiKV 中的 range(留神,这里的 range 和 partition 语法中的 range 是两码事,parition 语法中的一个 range,也可能对应多个 TiKV 中的 range),这些 range 是会被自在的调度的。在应用了 Partition 语法的表上创立的索引,在性能上也叫部分索引。测试后果全局索引:

本地索引:

CockroachDB 环境配置版本:22.1.6

CDB 与 TiDB 的架构是相似的,表构建于分布式 KV 之上,所有表都是分布式表,所有索引都是全局索引,没有单表的概念。须要留神的点:在 CDB 中,应用 Serial 类型主键(相似 mysql 中的 auto_increment),或者应用 unique_rowid() 作为主键,因为这两个都是有肯定工夫序的,都会产生显著的热点,简直无奈应用。测试中应用 UUID 类型的列,并应用 gen_random_uuid() 生成主键。这个实质是一个字符串,在 KV 层 range 的划分上能够认为是无序的。CDB 每个连贯的代价比拟高,无奈创立太多的连贯测试后果全局索引:

PolarDB- X 环境配置规格:私有云 8C32G*2 版本:5.4.13 留神:建库时须要应用 mode=auto,这种类型的数据库表不指定分区键的状况下是分布式表,同时索引是全局索引。索引前加 Local 关键字能够只创立 Local 索引测试后果全局索引:

本地索引:

附录 OceanBase 全局索引建表语句 create database sbtest_gsi8;
use sbtest_gsi8;
CREATE TABLE sbtest1 (
id int(11) NOT NULL,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;
create index k_2 on sbtest1(k2) global partition by hash(k2) partitions 32;
create index k_3 on sbtest1(k3) global partition by hash(k3) partitions 32;
create index k_4 on sbtest1(k4) global partition by hash(k4) partitions 32;
create index k_5 on sbtest1(k5) global partition by hash(k5) partitions 32;
create index k_6 on sbtest1(k6) global partition by hash(k6) partitions 32;
create index k_7 on sbtest1(k7) global partition by hash(k7) partitions 32;
create index k_8 on sbtest1(k8) global partition by hash(k8) partitions 32;

create database sbtest_gsi4;
use sbtest_gsi4;

CREATE TABLE sbtest1 (
id int(11) NOT NULL,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;
create index k_2 on sbtest1(k2) global partition by hash(k2) partitions 32;
create index k_3 on sbtest1(k3) global partition by hash(k3) partitions 32;
create index k_4 on sbtest1(k4) global partition by hash(k4) partitions 32;

create database sbtest_gsi2;
use sbtest_gsi2;
CREATE TABLE sbtest1 (
id int(11) NOT NULL,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;
create index k_2 on sbtest1(k2) global partition by hash(k2) partitions 32;

create database sbtest_gsi1;
use sbtest_gsi1;
CREATE TABLE sbtest1 (
id int(11) NOT NULL ,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1) global partition by hash(k1) partitions 32;

create database sbtest_gsi0;
use sbtest_gsi0;
CREATE TABLE sbtest1 (
id int(11) NOT NULL ,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;OceanBase 本地索引建表语句 create database sbtest_local8;
use sbtest_local8;
CREATE TABLE sbtest1 (
id int(11) NOT NULL,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1);
create index k_2 on sbtest1(k2);
create index k_3 on sbtest1(k3);
create index k_4 on sbtest1(k4);
create index k_5 on sbtest1(k5);
create index k_6 on sbtest1(k6);
create index k_7 on sbtest1(k7);
create index k_8 on sbtest1(k8);

create database sbtest_local4;
use sbtest_local4;

CREATE TABLE sbtest1 (
id int(11) NOT NULL,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1);
create index k_2 on sbtest1(k2);
create index k_3 on sbtest1(k3);
create index k_4 on sbtest1(k4);

create database sbtest_local2;
use sbtest_local2;
CREATE TABLE sbtest1 (
id int(11) NOT NULL,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1);
create index k_2 on sbtest1(k2);

create database sbtest_local1;
use sbtest_local1;
CREATE TABLE sbtest1 (
id int(11) NOT NULL ,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;
create index k_1 on sbtest1(k1);

create database sbtest_local0;
use sbtest_local0;
CREATE TABLE sbtest1 (
id int(11) NOT NULL ,
k int(11) NOT NULL ,
k1 int(11) NOT NULL ,
k2 int(11) NOT NULL ,
k3 int(11) NOT NULL ,
k4 int(11) NOT NULL ,
k5 int(11) NOT NULL ,
k6 int(11) NOT NULL ,
k7 int(11) NOT NULL ,
k8 int(11) NOT NULL ,
c char(120) NOT NULL ,
pad char(60) NOT NULL ,
PRIMARY KEY (id)
) partition by hash(id) partitions 32;TiDB 全局索引建表语句 create database sbtest8;
use sbtest8;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`),
    KEY `k_3` (`k3`),
    KEY `k_4` (`k4`),
    KEY `k_5` (`k5`),
    KEY `k_6` (`k6`),
    KEY `k_7` (`k7`),
    KEY `k_8` (`k8`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest4;
use sbtest4;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`),
    KEY `k_3` (`k3`),
    KEY `k_4` (`k4`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest2;
use sbtest2;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest1;
use sbtest1;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest0;
use sbtest0;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;TiDB 本地索引建表语句 create database sbtest_local8;
use sbtest_local8;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`),
    KEY `k_3` (`k3`),
    KEY `k_4` (`k4`),
    KEY `k_5` (`k5`),
    KEY `k_6` (`k6`),
    KEY `k_7` (`k7`),
    KEY `k_8` (`k8`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id) partitions 32;

create database sbtest_local4;
use sbtest_local4;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
        `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`),
    KEY `k_3` (`k3`),
    KEY `k_4` (`k4`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id) partitions 32;

create database sbtest_local2;
use sbtest_local2;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id) partitions 32;

create database sbtest_local1;
use sbtest_local1;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id) partitions 32;

create database sbtest_local0;
use sbtest_local0;
CREATE TABLE sbtest1 (

    `id` bigint(11) NOT NULL AUTO_RANDOM,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 partition by hash(id) partitions 32;PolarDB- X 全局索引建表语句 drop database sbtest_gsi0;
drop database sbtest_gsi1;
drop database sbtest_gsi2;
drop database sbtest_gsi4;
drop database sbtest_gsi8;
create database sbtest_gsi8 mode=auto;
use sbtest_gsi8;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`),
    KEY `k_3` (`k3`),
    KEY `k_4` (`k4`),
    KEY `k_5` (`k5`),
    KEY `k_6` (`k6`),
    KEY `k_7` (`k7`),
    KEY `k_8` (`k8`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_gsi4 mode=auto;
use sbtest_gsi4;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`),
    KEY `k_3` (`k3`),
    KEY `k_4` (`k4`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_gsi2 mode=auto;
use sbtest_gsi2;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`),
    KEY `k_2` (`k2`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_gsi1 mode=auto;
use sbtest_gsi1;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k1`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_gsi0 mode=auto;
use sbtest_gsi0;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;PolarDB- X 本地索引建表语句 drop database sbtest_local0;
drop database sbtest_local1;
drop database sbtest_local2;
drop database sbtest_local4;
drop database sbtest_local8;
create database sbtest_local8 mode=auto;
use sbtest_local8;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    LOCAL KEY `k_1` (`k1`),
    LOCAL KEY `k_2` (`k2`),
    LOCAL KEY `k_3` (`k3`),
    LOCAL KEY `k_4` (`k4`),
    LOCAL KEY `k_5` (`k5`),
    LOCAL KEY `k_6` (`k6`),
    LOCAL KEY `k_7` (`k7`),
    LOCAL KEY `k_8` (`k8`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_local4 mode=auto;
use sbtest_local4;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    LOCAL KEY `k_1` (`k1`),
    LOCAL KEY `k_2` (`k2`),
    LOCAL KEY `k_3` (`k3`),
    LOCAL KEY `k_4` (`k4`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_local2 mode=auto;
use sbtest_local2;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    LOCAL KEY `k_1` (`k1`),
    LOCAL KEY `k_2` (`k2`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_local1 mode=auto;
use sbtest_local1;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
            `k1` int(11) NOT NULL DEFAULT '0',
    `k2` int(11) NOT NULL DEFAULT '0',
    `k3` int(11) NOT NULL DEFAULT '0',
    `k4` int(11) NOT NULL DEFAULT '0',
    `k5` int(11) NOT NULL DEFAULT '0',
    `k6` int(11) NOT NULL DEFAULT '0',
    `k7` int(11) NOT NULL DEFAULT '0',
    `k8` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    LOCAL KEY `k_1` (`k1`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

create database sbtest_local0 mode=auto;
use sbtest_local0;
CREATE TABLE sbtest1 (

    `id` int(11) NOT NULL AUTO_INCREMENT,
    `k` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;CockroachDB 全局索引建表语句 drop database sbtest1 CASCADE;
drop database sbtest2 CASCADE;
drop database sbtest4 CASCADE;
drop database sbtest8 CASCADE;

create database sbtest0;
use sbtest0;
CREATE TABLE sbtest1 (

    id UUID NOT NULL DEFAULT gen_random_uuid(),
    k int NOT NULL ,
            k1 int NOT NULL ,
    k2 int NOT NULL ,
    k3 int NOT NULL ,
    k4 int NOT NULL ,
    k5 int NOT NULL ,
    k6 int NOT NULL ,
    k7 int NOT NULL ,
    k8 int NOT NULL ,
    c char(120) NOT NULL ,
    pad char(60) NOT NULL,
    PRIMARY KEY (id)

);

create database sbtest1;
use sbtest1;
CREATE TABLE sbtest1 (

    id UUID NOT NULL DEFAULT gen_random_uuid(),        
            k int NOT NULL ,
            k1 int NOT NULL ,
    k2 int NOT NULL ,
    k3 int NOT NULL ,
    k4 int NOT NULL ,
    k5 int NOT NULL ,
    k6 int NOT NULL ,
    k7 int NOT NULL ,
    k8 int NOT NULL ,
    c char(120) NOT NULL ,
    pad char(60) NOT NULL,
    PRIMARY KEY (id),
            INDEX k_1(k1)

);

create database sbtest2;
use sbtest2;
CREATE TABLE sbtest1 (

    id UUID NOT NULL DEFAULT gen_random_uuid(),
    k int NOT NULL ,
            k1 int NOT NULL ,
    k2 int NOT NULL ,
    k3 int NOT NULL ,
    k4 int NOT NULL ,
    k5 int NOT NULL ,
    k6 int NOT NULL ,
    k7 int NOT NULL ,
    k8 int NOT NULL ,
    c char(120) NOT NULL ,
    pad char(60) NOT NULL,
    PRIMARY KEY (id),
            INDEX k_1(k1),
            INDEX k_2(k2)

);

create database sbtest4;
use sbtest4;
CREATE TABLE sbtest1 (

    id UUID NOT NULL DEFAULT gen_random_uuid(),
    k int NOT NULL ,
            k1 int NOT NULL ,
    k2 int NOT NULL ,
    k3 int NOT NULL ,
    k4 int NOT NULL ,
    k5 int NOT NULL ,
    k6 int NOT NULL ,
    k7 int NOT NULL ,
    k8 int NOT NULL ,
    c char(120) NOT NULL ,
    pad char(60) NOT NULL,
    PRIMARY KEY (id),
            INDEX k_1(k1),
            INDEX k_2(k2),
            INDEX k_3(k3),
            INDEX k_4(k4)

);

create database sbtest8;
use sbtest8;
CREATE TABLE sbtest1 (

    id UUID NOT NULL DEFAULT gen_random_uuid(),
    k int NOT NULL ,
            k1 int NOT NULL ,
    k2 int NOT NULL ,
    k3 int NOT NULL ,
    k4 int NOT NULL ,
    k5 int NOT NULL ,
    k6 int NOT NULL ,
    k7 int NOT NULL ,
    k8 int NOT NULL ,
    c char(120) NOT NULL ,
    pad char(60) NOT NULL,
    PRIMARY KEY (id),
        INDEX k_1(k1),
        INDEX k_2(k2),
        INDEX k_3(k3),
        INDEX k_4(k4),
        INDEX k_5(k5),
        INDEX k_6(k6),
        INDEX k_7(k7),
        INDEX k_8(k8)

); 欢送大家留言探讨。原文链接:https://click.aliyun.com/m/10… 本文为阿里云原创内容,未经容许不得转载。

正文完
 0