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

问题描述

我正试图弄清楚该看什么,以试图理解为什么我在 AWS RDS MysqL 数据库上看到 COUNT WHERE 查询性能比在本地 CentOS 上运行的 MariaDB 数据库上的相同查询慢得多服务器。

查询看起来像:

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

在本地实例上,即使设备系列有 20M 左右的记录,这样的本地实例查询也会在短时间内返回。在 RDS 上需要很多分钟。

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

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

相关表中的数据是从本地服务器迁移到 RDS 的,本质上是一样的:150M 记录,包含少量字段,没有关系或外键(目前是 DB 中唯一的表)。

索引(SHOW INDEXES FROM)是一致的。

不确定还有什么是相关的或从哪里开始?

解决方法

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

CREATE INDEX idx ON devices (device_family,serial);

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