tidb执行计划问题

tidb的执行计划。 select a from xxxx where a = ‘aaaa’ 和where a like ‘%aaaa%’. 这种sql是不是全部显示成indexfullscan,区别哪个是正的全索引扫描,哪个是b+树精确匹配 只能通过estRows 的数值。这个理解对不对

您好,我们没有 B+ 树的概念。indexfullscan 是索引全扫描,查询 select 的是 a 字段,直接可以通过 a 字段的索引扫描就能扫描出结果。



https://tikv.org/deep-dive/key-value-engine/b-tree-vs-lsm/

那是不是tikv这边的索引方式 和hbase是一种类型,如果对a进行了索引,那么查a的具体值,也是全索引扫描查到符合条件的索引

TiKV 这边底层的存储是使用的 rocksdb 和 HBASE 一样是用的 LSM Tree 的数据存储结构。

目前 安装的基本版本 使用absible安装的tidb 是不是就只包含tidb,pd,tikv(rockdb底层). tiflash,titan之类的需要使用需要单独安装是不是?

目前 tidb这边的索引符合最左前缀规则吧?
a存在索引的情况: select * from tablename where a = ‘xxx’ 这种sql这种执行计划,a存在索引的时候是不是能准确的定位到具体的region,但是需要把region数据全部加载到内存。 select * from tablename where a like “%aaa%” 这种sql,虽然存在索引,但是还是会在所有的a索引region上执行,无法定位到具体存在于哪一个region。所以执行时候影响范围更大,因为所有tikv都会执行。 但是他们两个在执行计划里面执行的是不是全都是indexfullscan?

这是两种执行计划,等值查询,如果有索引会优先使用 IndexRangeScan。而 like “%aaa%” 模糊查询,无法走到索引,而是直接全表扫描。这里 TIDB 进行一些优化,会将谓词下推到 TiKV 完成,然后结果返回到 TIDB 进行汇合计算。具体你可以了解一下官方博客,对于查询优化器的介绍相关文档,如果对于执行计划不太确认,可以通过 TIUP Playground 拉起数据库,验证一下。

sorry 我上面的sql其实主要是想使用 select a from tablename where a = ‘xxx’ 和 select a from tablename where a like “%aaa%” 这种 可以使用覆盖索引的 写成了*
1 这种tidb是不是会使用覆盖索引 2 如果使用了,那么是不是我上面说的区别

不会,region 在存储 key-value 中是逻辑概念,在真正进行查询不会有 region 的范围逻辑。如果可以定位到是 a 的等值查询,会根据统计信息的 CM-Sketch 将 key 读取到内存中。