问题描述
我正试图弄清楚该看什么,以试图理解为什么我在 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
子句并应加快查询速度。您也可以尝试交换索引中两列的顺序。