【问题标题】:MySQL select count(distinct id) is very slowMySQL select count(distinct id) 很慢
【发布时间】:2012-10-13 16:34:04
【问题描述】:

我有一个包含大约 7000 万条记录的 MyISAM 表。当我执行select count(distinct id) 时,大约需要 80 秒才能获得查询结果。该表是非规范化表,这就是为什么我需要获取 id 的唯一计数,并且必须动态完成。如果我添加一个 where 子句,根据我给出的范围,它需要更短的时间,在 4 - 90 秒之间。

我想知道是否有任何方法可以优化它以提高查询速度。

【问题讨论】:

  • id 列上是否有索引?
  • 你能显示查询吗?你能用explain select......吗?结构呢? PK、FK?索引?,索引的类型??
  • 是的,我在 id 字段上有索引,在 where 子句中有字段索引,这就是为什么当我使用“where”取决于范围时,查询会更快。 | 1 |简单 | tmp_rep_1018 |索引 |空 |西德 | 4 |空 | 79146975 |使用索引 |

标签: mysql select query-optimization distinct-values


【解决方案1】:

尝试SELECT SQL_CALC_FOUND_ROWS DISTINCT(id) FROM ...,然后执行查询SELECT FOUND_ROWS() AS Total 以获取结果。

【讨论】:

  • 我推荐你阅读这篇博文mysqlperformanceblog.com/2007/08/28/…
  • 忘了说我们需要查看表结构才能为您提供更准确的答案。
  • 使用 sql_Calc_found_rows 大约需要 7 分钟,我需要找出一种更好的方法来获取计数,谢谢。
猜你喜欢
  • 2023-03-15
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 2016-08-14
  • 1970-01-01
  • 2015-01-15
相关资源
最近更新 更多