【问题标题】:What is the best way to have indexing in mysql在mysql中建立索引的最佳方法是什么
【发布时间】: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 次。)可能有更好的方法来实现您想要实现的目标。

标签: mysql indexing


【解决方案1】:

attemptmax_attempt 是否都在表中?我会假设他们是。

然后处理是否会更改其中一些列?

添加这个:

INDEX(thread, duration,  -- in either order
      id)

一次抓取 100 行,而不仅仅是一个。然后,在处理它们时,仔细检查可能已更改的列。 “抓取”会慢一点(但不是 100 倍);测试可能会快很多。请务必为 that 测试设计一个最佳索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多