为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:v3.1.0-beta.1
- 【问题描述】:一张表没有设置主键,然后把unique key设置为自增id,在一个tidb-server节点插入数据id不连续都是奇数,但是把这列自增id设置为primary key后插入数据后id 就都是连续的
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
您这种写法是正常的,如果一条一条写的话,会出现我说的状况
insert into t1 (x) values (x);
insert into t1 (x) values (x);
insert into t1 (x) values (x);
已经重现,感谢反馈。我们这边内部排查一下。
确认了一下,这个是预期内的行为,因为在没有 primary key 的情况下, auto_increment 的池子有一部分配给 _tidb_rowid
。
mysql> insert into t2 (c1) values (1);insert into t2 (c1) values (2);insert into t2 (c1) values (3);
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
mysql> select * from t2;
+------+------+
| id | c1 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 7 | 1 |
| 9 | 2 |
| 11 | 3 |
+------+------+
6 rows in set (0.00 sec)
mysql> show create table t2;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t2 | CREATE TABLE `t2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
UNIQUE KEY `uk_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=30001 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select _tidb_rowid,id from t2;
+-------------+------+
| _tidb_rowid | id |
+-------------+------+
| 4 | 1 |
| 5 | 2 |
| 6 | 3 |
| 8 | 7 |
| 10 | 9 |
| 12 | 11 |
+-------------+------+
6 rows in set (0.01 sec)
好的谢谢,这个是出于什么考虑为什么_tidb_rowid和unique_key要共用一个auto_increment,而不是_tidb_rowid独自维护一个
历史问题,后面会考虑分开做
好的 感谢
感谢解答
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。