上周我做了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(*)就行。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




