我在 RDS 上遇到了性能问题。我正在使用带有 MySQL 的 Play Framework 2.1.1。我正在测试的查询在我从 Mac 上的 brew 安装的本地未修改 MySQL 数据库上大约需要 2 秒。但是当我在 MySQL RDS 上运行相同的查询时,它需要大约 12 秒,这比我的本地查询慢得多,这让我感到困惑。
技术。
- 播放框架2.1.1
- MySQL 5.xx
- MySQL RDS(中,300GB,5.5.27)
我想要实现的是多对多的 sql 映射。
这是我的模型
@Entity
@Table(name = "PRODUCTS")
public class Product extends Model {
@Id
public Long id;
public String code;
public String title;
@ManyToMany(cascade = {ALL})
@JoinTable(name="OFFER_MAPPING",
joinColumns={@JoinColumn(name="FK_U_ID")},
inverseJoinColumns={@JoinColumn(name="FK_P_ID")})
public List<Offer> offers = new ArrayList<Offer>();
}
@Entity
@Table(name = "Offer")
public class Offer extends Model {
@Id
public Long id;
public DateTime startDate;
public DateTime endDate;
@ManyToMany(mappedBy="offers")
public List<Product> products = new ArrayList<Product>();
}
这是我正在使用的 Finder
List<Offer> offers = new Model.Finder<Long, Offer>(Long.class, Offer.class)
.fetch("products", new FetchConfig().query())
.where()
.betweenProperties("startDate", "endDate", new DateTime())
.findList();
生成这个 sql
select t0.id c0, t0.start_date c1, t0.end_date c2
, t1.id c3, t1.code c4, t1.title c5
from Offer t0
left outer join Offer t1z_ on t1z_.FK_P_ID = t0.id
left outer join PRODUCTS t1 on t1.id = t1z_.FK_U_ID
where '2013-04-26' between t0.start_date and t0.end_date
order by t0.id;
我在 MySQL 中运行这个查询,这需要 MySQL RDS 12 秒才能吐出结果。
欢迎来自 EBean、SQL 语句或 RDS 的任何建议。非常感谢。