ITPub博客

首页 > 数据库 > PostgreSQL > 全表扫描和全索引扫描继续(PG-TiDB)

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

原创 PostgreSQL 作者:xuexiaogang 时间:2023-02-20 17:58:06 0 删除 编辑

   上周我做了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(*)就行。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-2936058/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OracleACE/PostgreSQLACE/阿里云MVP/腾讯云TVP/墨天轮 MVP/TiDBMVA/数盟会华东区长老/OpenTenBase社区委和技术委委员/架构师技术同盟名人堂成员上海地区理事会成员/if社区联合发起人/《DBA实战手记》作者/公众号:四海内皆兄弟

注册时间:2013-07-01

  • 博文量
    422
  • 访问量
    953527