这个解释合理
1 个赞
能举个例子吗
发现我对点查的理解有点偏差哈哈,和 IndexLookup混淆了, Point_Get只有唯一键有,当然了主键也是唯一键的一种
主键就是唯一索引加非空约束
1 个赞
这个回答比较靠谱,是否回表,得看是否覆盖到这个
首先是聚簇表,还要分清主键和唯一键,主键过滤不需要,唯一键做不到
需要的
一个简单的办法就是看一下查询走的索引是否包含了select部分所有的字段,请了解一下“全覆盖索引”。
如果覆盖了字段,就不需要回标
唯一索引不是主键,select * 肯定要回表,要不数据从哪里取
索引里面有要查询的列就不要回表,直接取出来了,没有就要回表
看来是各有各的理解啊,学习了
要回的。
1 个赞
explain select age from user1 where age=10;不需要回表 另外age不可能建唯一索引,这个例子不好。
tikv是kv数据库,能直接算出来key那就是Point_Get
那为什么非唯一索引走的IndexRangeScan。
根据官方文档说法,唯一索引结构是这样的:
Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue
Value: rowID
非唯一索引结构是这样的:
Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue_rowID
Value: null
都能根据索引算出rowID。
看你的select语句后面的字段,你的语句时“select *” 代表你想要查询所有的字段,你的age字段虽然是唯一索引,但是这个索引只有age这一个字段,跟你想要的“所有字段”不相符,所以还是需要回表捞取其他字段
Point_Get只唯一索引和主键索引获得key的