主键问题


建表语句如上,

通过uid 和datecode查出来两条记录。
但是通过roomid和datecode 一条记录。

理论上 不是会有主键冲突的问题吗 为什么通过不同字段查询 显示了不同的结果,,,,,,,,,,我都不知道重复的这两条数据是怎么插入的

check一下索引看看,可能是索引和数据不一致。
https://docs.pingcap.com/zh/tidb/stable/sql-statement-admin-check-table-index#admin-check-tableindex

https://docs.pingcap.com/zh/tidb/stable/troubleshoot-data-inconsistency-errors#admin-check-中的报错

1 个赞

check下索引,有问题就修复,再不行就重建……

目前还没check出来 表太大 :cold_sweat:

请问是什么问题导致的不一致哪?


这里面2条查询语句,去掉一个,单独执行

应该是索引数据和表数据不一致导致的

这种情况只能重建表嘛? 并把主键和索引都设为聚簇索引嘛,。 为什么会出现这种情况啊。 就因为我不是聚簇索引?

可能是两条记录写到了不同的分区上,所以没有报冲突。可以用 use partition(xx) 试试看是不是这个原因。

也可以把两个 SQL 的执行计划发上来大家一起看一下

这个问题在RocksDB引擎上也遇到过,因为索引数据页损坏了,可以check table 看下,如果报损坏了,同时可以rebuild下索引

不用重建表,把有问题的索引删了重建就好了。

ADMIN CHECK INDEX tbl_name,如果表大,怀疑主键索引有问题,就针对主键索引进行校验:ADMIN CHECK INDEX tbl_name idx_name; 如果校验后报错,参考这个: 数据索引一致性错误 | TiDB 文档中心 (pingcap.com)

重建成聚簇索引 还是非聚簇索引

idx_Uid这个,因为是按照这个索引查询的时候,数据是异常的。

这是做了什么操作呢

聚簇索引

我这个表很大 rebuild 能成功嘛
我现在check 索引 都出不来


不管什么原因,这个都能算个软件bug吧

这样应该是数据索引不一致了