暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

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

原创 薛晓刚 2023-02-20
991

   上周我做了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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论