1

我在 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 的任何建议。非常感谢。

4

0 回答 0