【发布时间】:2018-08-16 06:47:44
【问题描述】:
似乎是个小问题,但我很困惑。
我有一张大约有 25 列的表格。该表在任何时间点都将包含 > 100k 行。 我想在循环中连续运行下面的查询。
SELECT recordfile
FROM MYTABLE
WHERE duration = '0'
AND attempt < max_attempt
AND thread =1
ORDER BY id ASC
查询似乎花费了太多时间(平均 0.0150 秒)。如何放置适当的索引或任何其他方法,以使查询以最佳方式快速?
【问题讨论】:
-
为什么说 0.015 秒是“更多时间”?它甚至在更短的时间内运行吗?您是否已经为此表建立了任何索引?
-
我期待在 0.0005 的范围内,这是我在其他表中得到的,其他一些查询。由于它需要获取该行并将其发送到下一个进程,我说它很慢。我给出了 id 索引和持续时间、尝试和最大尝试的另一个索引。
-
0.015 总体上看起来不错,如果没有有关您的数据分布的更多详细信息,我们无法击败它。如果例如200 万行中只有 2 行的持续时间 = 0,持续时间的索引就足够了;如果不是,那么不是。如果 500 万行符合您的条件,则仅发送这些行需要很长时间。 (我猜 max_attempt-attempt 是最相关的,你可能需要重新设计它才能索引它)。通常,“需要 0.0005 秒”和“连续循环”会敲响很多警钟(例如,您可能希望每秒运行 2000 次。)可能有更好的方法来实现您想要实现的目标。