我正在将我们的Amazon RDS MsSQL数据库迁移到RDS Aurora,但我对Aurora缺乏性能印象深刻。
UPDATE Cars
SET CurrentDriver_id = (
SELECT Drivers.Id
FROM Drivers
WHERE Drivers.Car_id = Cars.Id
ORDER BY Drivers.Id DESC
LIMIT 1)
WHERE Cars.Id BETWEEN 1 AND 500;
我必须限制前500个记录,所以我甚至可以在Aurora中看到结果。
即使限制为500行,Aurora也需要55秒,而所有70.000条记录的MsSQL只需不到1秒。 在这种情况下,MsSQL的执行速度比Aurora快了近8.000倍。
本主题不是查询本身,也不是如何改进。这只是在70k Cars和220k Drivers上运行的简单更新。对数据库来说应该没什么。
Cars.Id和Drivers.Id是主键。没有索引,没有外键。
这是预期的吗?!
编辑: 1.两个RDS都是db.t2.medium 2. MsSQL是一个拥有数百名用户的生产服务器,而Aurora只是我。
答案 0 :(得分:2)
您可以尝试使用不使用subselect的方法
UPDATE Cars
inner join Drivers on Drivers.Car_id = Cars.Id and Cars.Id BETWEEN 1 AND 500
SET Cars.CurrentDriver_id = Drivers.Id