与本地服务器上的 MariaDB 相比,RDS MySql 上的 COUNT WHERE 性能较慢

Slow COUNT WHERE performabnce on RDS MySql compared to MariaDB on local server

我试图找出要查看的内容以尝试理解为什么我发现 AWS RDS MySql 数据库上的 COUNT WHERE 查询与 MariaDB 上的相同查询相比性能要慢得多本地 CentOS 服务器上的数据库 运行。

查询如下:

SELECT COUNT(serial) FROM devices
    WHERE device_family="foo"
      AND serial > 1000
      AND serial < 10000000;

在本地实例上像这样 return 查询在几秒钟内完成,即使设备系列有 20M 左右的记录。在 RDS 上,它需要很多分钟。

我的数据库经验有限,我想知道如何理解这里发生的事情。

RDS 实例是 db.m5.xlarge,4 个 vCPU,16 GB RAM,预配置 IOPS (SSD) 1000 IOPS。我将 IOPS 提高到 10K,但只看到了适度的改进。

相关table中的数据从本地服务器迁移到RDS,本质上是一样的:150M记录,只有少数几个字段,没有关系或外键(目前是唯一的table 在数据库中)。

索引(SHOW INDEXES FROM)一致

不确定还有什么相关的或从这里去哪里?

本地和 RDS 实例之间可能存在差异的原因有很多。除了 运行 EXPLAIN 两种环境下的查询,您可以考虑添加以下索引:

CREATE INDEX idx ON devices (device_family, serial);

如果使用此索引,将完全覆盖 WHERE 子句,并应加快查询速度。您也可以尝试交换索引中两列的顺序。