2017-08-17 149 views
1

我正在将我们的Amazon RDS MsSQL数据库迁移到RDS Aurora,但Aurora缺乏性能让我印象深刻。RDS Aurora(MySQL)性能极差

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汽车和220k驱动程序上。它应该对数据库没有任何影响。

Cars.Id和Drivers.Id是主键。没有索引和外键。

这是预期吗?!

编辑: 1.两个RDS都是db.t2.medium 2. MsSQL是一个有数百个用户的生产服务器,而Aurora只有我。

+0

预期的做法,即写得不好查询,表现不佳。所以这个问题的确应该是如何改进查询。 –

+1

您是如何将数据从MySQL迁移到Aurora的?如果你手动确实在Aurora中创建了相同的索引? MySQL和Aurora是否在相同的实例类型上运行?你确定任何自定义MySQL参数也被应用于Aurora吗?将数据移入Aurora之后,您是否优化了Aurora中的表格? –

+0

@EugenRieck那么,您是否告诉我Aurora仅在智能查询方面表现良好?如果是这样,MsSQL要好得多,因为即使写得不好,它也能很好地工作。 –

回答

2

你可以尝试使用不使用子查询

UPDATE Cars 
    inner join Drivers on Drivers.Car_id = Cars.Id and Cars.Id BETWEEN 1 AND 500 
    SET Cars.CurrentDriver_id = Drivers.Id 
+0

OMG!在那之后,Aurora所有行都只需要1.3秒!谢谢你赐予伟大的赞赏,而不是批评。 –

+0

@HugoRamos好,如果答案是如此之好,你也可以评价为有用 – scaisEdge