gpt4 book ai didi

mysql - 如何优化这个 MySQL 查询? (移动窗口)

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:20 24 4
gpt4 key购买 nike

我有一个巨大的表格(超过 40 万行),其中每一行都描述了外汇市场中的一个事件。该表的主键是一个名为“pTime”的整数 - 它是事件在 POSIX 中发生的时间时间。

在我不断运行的模拟过程中,我的计算机反复查询我的数据库。在此模拟期间,我将输入 pTime(我称之为 qTime)传递给 MySQL 过程。 qTime 是来自同一个巨大表的查询点。使用 qTime,我的程序根据以下规则过滤表格:

仅选择 pTime 在任何一天与输入 qTime 最多相差 2 小时的那些行。

例如。

query point: `2001-01-01  07:00`
lower limit: `ANY-ANY-ANY 05:00`
upper limit: `ANY-ANY-ANY 09:00`

本次查询后,查询点将移动 1 行(5 分钟),并启动新的查询:

query point: `2001-01-01  07:05`
lower limit: `ANY-ANY-ANY 05:05`
upper limit: `ANY-ANY-ANY 09:05`

这是我实现的方式:

SELECT * FROM mergetbl WHERE
TIME_TO_SEC(TIMEDIFF(FROM_UNIXTIME(pTime,"%H:%i"),FROM_UNIXTIME(qTime,"%H:%i")))/3600
BETWEEN -2 AND 2

虽然我在 pTime 上有一个索引,但这段代码显着降低了我的软件速度。

我想为 pTime 的每个值(稍后将用作输入 qTime)预处理此语句,但我想不出一种方法来执行此操作。

最佳答案

您的查询仍然需要扫描每个值,因为您是如何在不跨越索引的特定范围内测试时间的。

您需要将您的时间分配到不同的字段和索引中,以便在此处获得索引的好处。

(注意:编辑了答案以解决我最初对问题的误解)

关于mysql - 如何优化这个 MySQL 查询? (移动窗口),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507918/

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