建表语句如上,
通过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-中的报错
check下索引,有问题就修复,再不行就重建……
目前还没check出来 表太大
请问是什么问题导致的不一致哪?
这种情况只能重建表嘛? 并把主键和索引都设为聚簇索引嘛,。 为什么会出现这种情况啊。 就因为我不是聚簇索引?
可能是两条记录写到了不同的分区上,所以没有报冲突。可以用 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吧
这样应该是数据索引不一致了