【问题标题】:Optimizing a select from a large table优化从大表中选择
【发布时间】:2012-03-29 14:24:03
【问题描述】:

我有一个大约有 4000 万行的表,我想运行这样的东西:

SELECT country, count(*) FROM `signups`
where `signed_up` > '2012-03-20 00:00:00'
group by country

基本上是在特定日期(通常是上周)之后获取每个国家/地区的注册人数。每天大约有 40 万注册,总共有 4000 万左右。

查询在上周没有运行,我得到一个“MySQL 服务器已消失”...有什么优化方法吗?

【问题讨论】:

  • countries 上有哪些索引?
  • 只有一个索引,主键是signup_id
  • 始终使用 EXPLAIN SELECT ... 命令来查看您的数据库将如何回答您的查询。自从您在此字段上搜索以来,signed_up 上的索引也不会受到伤害。

标签: mysql


【解决方案1】:

请使用以下查询并在 signed_up 列上添加索引。您一定会获得性能提升。

signups选择国家,计数(signup_id) 其中signed_up > '2012-03-20 00:00:00' 按国家分组

问候, 阿洛克

【讨论】:

    【解决方案2】:

    计数 * 是对性能的打击。如果可能的话,最好不要做任何事情。这只是导致数据库引擎做更多的工作,从而减慢了查询速度。

    Alok 是对的,为您通常搜索的列添加索引,并且在查询运行时已经创建了哈希表。否则引擎将需要创建结果的哈希表才能真正获得结果。索引会事先执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多