我有一个缓慢的问题,我正试图加快:
@Query("select max(t.timestamp) from TradeDbo t where t.currencyPair.id = :currencyPairId")
Date findMaxTimestamp(@Param("currencyPairId") Long currencyPairId);
实体定义如下:
@Entity()
@Table(name = "Trade",
indexes = { @Index(name = "idx_timestamp_currencypairid",
columnList = "timestamp,currency_pair_id")})
public class TradeDbo extends Auditable<String> {
@Id @GeneratedValue
@Getter private Long id;
@Version
private long version;
@JoinColumn(name = "currency_pair_id")
@ManyToOne(fetch=FetchType.EAGER)
@Getter private CurrencyPairDbo currencyPair;
@Column(name = "timestamp")
@Convert(converter = DateConverter.class)
@Getter private Date timestamp;
...
如您所见,我已经在timestamp/currencypairid上定义了一个索引(请参阅如何加速max()查询),我原以为max(timestamp)只是读取btree的最后一页,但它仍然需要与添加索引之前一样长的时间。
1条答案
按热度按时间vh0rcniy1#
按以下步骤进行查询:
您的复合索引对您的性能没有用处您应该更改列顺序
首先使用where条件中涉及的列。。
使用列构建的索引内容用于从左到右读取