为了仅获取具有最新时间戳的数据,我使用此答案中的 mysql 查询:
fetch-the-row-which-has-the-max-value- for-a-column
我的查询如下:
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)
最佳答案
您正在使用所谓的依赖子查询。这些查询有时效率非常低。
您可以使用此子查询来检索每个 stock_id 值的最大时间戳。
SELECT MAX(timestamp) timestamp, stock_id
FROM market
GROUP BY stock_id
你的复合主键应该会让这个过程变得相当快,因为 MySQL 会这样做 a "loose index scan" to满足它。
然后您可以将其用作子查询,如下所示:
SELECT m.stock_id, m.timestamp, m.price
FROM market m
JOIN (
SELECT MAX(timestamp) timestamp, stock_id
FROM market
GROUP BY stock_id
) maxt on m.stock_id = maxt.stock_id AND m.timestamp = maxt.timestamp
这也应该利用您的主键。
关于mysql - 优化mysql最新时间戳查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50298166/