为了仅获取具有最新时间戳的数据,我使用以下答案中的mysql查询:
获取列的最大值所在的行
我的问题如下:
SELECT stock_id,timestamp,price FROM market m1
WHERE timestamp =
(SELECT MAX(timestamp) FROM market m2 WHERE m1.stock_id = m2.stock_id)
但执行起来需要10分钟。
优化它有哪些不同的选择(mysql数据库)
市场有以下模式:(sqlalchemy)
class Market(db.Model):
stock_id=db.Column(db.Integer,db.ForeignKey('stock.id'),primary_key=True)
timestamp=db.Column(db.Integer,primary_key=True)
price=db.Column(db.Float)
2条答案
按热度按时间isr3a4wc1#
您使用的是所谓的依赖子查询。这些有时效率很低,因为查询规划器会对外部查询中的每个值重复它们(
m1.stock_id
在你的情况下)。您可以使用此子查询来检索每个股票id值的最大时间戳。
您的复合主键应该使这一点非常快,因为mysql将做一个“松散索引扫描”来满足它。
然后可以将其用作子查询,如下所示:
这也应该利用您的主键。https://use-the-index-luke.com/
qltillow2#
您使用的是所谓的依赖子查询。有时效率很低。
您可以使用此子查询来检索每个股票id值的最大时间戳。
您的复合主键应该使这一点非常快,因为mysql将做一个“松散索引扫描”来满足它。
然后可以将其用作子查询,如下所示:
这也应该利用您的主键。