我正在将我们的Amazon数据库迁移到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记录,以便我甚至可以看到的结果,在极光。
即使限制在500行,Aurora需要难以置信的55s,而MsSQL对所有70.000条记录所用的时间还不到1秒。在这个场景中,MsSQL的执行速度几乎比Aurora快8.000倍。
本主题的主题不是查询本身,也不是如何改进查询本身。这只是一个简单的更新运行在70000辆汽车和220 K司机。对数据库来说不应该是什么。
Cars.Id和Drivers.Id是主键。没有索引也没有外键。
这是意料之中的吗!
编辑: 1.这两个RDS都是db.t2.media 2。MsSQL是一个拥有数百个用户的生产服务器,而Aurora只是我。
发布于 2017-08-17 17:00:55
您可以尝试使用一种不使用子选择的方法
UPDATE Cars
inner join Drivers on Drivers.Car_id = Cars.Id and Cars.Id BETWEEN 1 AND 500
SET Cars.CurrentDriver_id = Drivers.Id https://stackoverflow.com/questions/45741054
复制相似问题