TiDB 单表200亿如何提高性能?

CREATE TABLE test (
id varchar(32) NOT NULL,
no varchar(50) DEFAULT NULL,
mode varchar(50) NOT NULL,
type varchar(50) NOT NULL,
createTime datetime NOT NULL,
updateTime datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id,createTime) /*T![clustered_index] NONCLUSTERED */,
KEY idx_createTime (createTime),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin /*T! SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=4 */

非聚簇表+SHARD_ROW_ID_BITS 打散,或者

CREATE TABLE test (
pk bigint(20) AUTO_RANDOM NOT NULL,
id varchar(32) NOT NULL,
no varchar(50) DEFAULT NULL,
mode varchar(50) NOT NULL,
type varchar(50) NOT NULL,
createTime datetime NOT NULL,
updateTime datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (pk) /*T![clustered_index] CLUSTERED */,
unique key(id,createTime)
KEY idx_createTime (createTime),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

聚簇表+auto random 打散。

你每天的数据量都有1-4亿,我很难想象表结构不出问题的话,这些数据会集中在其中的1-3台tikv上。
我上面那个2.6亿的表,就是 NONCLUSTERED +SHARD_ROW_ID_BITS =3.按天查也不会出现有其他tikv在围观别的tikv干活的情况。时间片再小一点到是有可能。

2 个赞