gpt4 book ai didi

mysql - 如何加速 max(...) 查询

转载 作者:行者123 更新时间:2023-11-29 05:52:42 27 4
gpt4 key购买 nike

我正在尝试加快查询速度:

 @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;
...

而且,如您所见,我已经在时间戳/货币对上定义了一个索引(请参阅 how to speed up max() query),我认为这会使 max(timestamp) 只是读取 btree 的最后一页,但是它仍然需要与添加索引之前一样长的时间。

最佳答案

做你的查询

"select max(t.timestamp) from TradeDbo t where t.currencyPair_id = :currencyPairId"

您的复合索引对您的性能没有用,您应该更改列顺序

columnList = "currency_pair_id,timestamp"

首先使用where条件涉及的列..

使用列构建的索引内容用于从左到右阅读

关于mysql - 如何加速 max(...) 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52634053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com