【问题标题】:MySQL taking too much time to executeMySQL 执行时间过长
【发布时间】:2023-03-16 12:33:01
【问题描述】:

我的查询很简单,但包含大量数据:

SELECT * 
FROM trackhistory 
WHERE key=14846 and 
    date between "2016-11-15 00:00:00" and "2016-12-16 13:47:02"

我在这个表中有超过 1000 万行。

我的表结构是:

请帮我优化一下。执行需要两分钟多的时间。

我已经对查询使用了解释,但没有得到任何线索。

【问题讨论】:

  • 定义了任何索引?如果不是,则为键添加一个,为日期添加一个
  • 可能的键为空应该给你一个线索......

标签: mysql optimization where-clause between


【解决方案1】:

复合的INDEX(key, date) 会比单独的索引更好。

my index cookbook

【讨论】:

    【解决方案2】:

    首先,给Key 添加一个索引,看看会发生什么。语法是这样的:

    ALTER TABLE `trackhistory` ADD INDEX (`product_id`)
    

    然后您可以向Date 添加一个密钥,但这会在插入时增加一些额外的工作量,并且会占用一些磁盘空间。这将取决于您的用例,并且无法说这是否是明智之举。

    最好的办法是尝试你的用例。

    (为了我的理智,如果你的数据库中有骆驼案例,为什么不在你的查询中显示这些很好。这看起来很恶心,有一个 Date 字段和 date 在你的查询。我知道它有效,但是....)

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2021-10-19
      相关资源
      最近更新 更多