全表扫描和全索引扫描继续(PG-TiDB)

来源:这里教程网 时间:2026-03-14 20:57:01 作者:

   上周我做了Oracle和MySQL的。这两个是一样的结论,就是select count(*) from t不带where条件都是全索引。今天看看PostgreSQL和TiDB的。我们只有一套PG库,没有TiDB,这些都是凭借兴趣学习的。所以这上面如果有错的还请指出。

PG14中一个表,表结果如下:有10万条数据。

看执行计划出现的都是 Seq Scan,并没有看到使用到索引的样子。这是全表查询的姿势。

我只选择主键列,想通过不用会表的方式看看。结果红框的SQL也没有达到预期效果。

只有到了使用where条件以后的,select id,才出现了期望得到的仅使用索引的  index only scan的效果。(这里我是和灿灿问了一下,确定了和我最初想法不一样)这个是类似MySQL索引覆盖的效果。

如果是*的话,使用索引就不是索引覆盖了。 Index Scan和上面的index only scan 是有区别。

PG的做完了,看看TiDB的(TiDB兼容MySQL看看这个继承了吗?)

TiDB的表结构情况和数据情况

实测结果,也没有和MySQL一样,无论是*还是主键。不带where条件都是全表查。没有用到全索引扫描。

但是如果用到除了主键之外的索引列时候。就出现预期的 IndexFullScan效果了。

今天小结一下:PG和TiDB在这个场景上都和Oracle MySQL不一样。PG不用where条件是基本不行了。TiDB是需要指定一下列才行。Oracle和MySQL是count(*)就行。

相关推荐