【问题标题】:How to run this complex query on millions of rows如何在数百万行上运行这个复杂的查询
【发布时间】:2015-06-01 01:46:23
【问题描述】:

我有数百万行 Message.rb

我正在尝试运行迁移:

add_index :messages, [:mm_id, :c_id, :s_id], unique: true, name: :mm_unique

但是迁移失败,因为它发现了重复的行。我不关心s_id的值是什么(只要是整数),s_id和mm_id只需要在c_id范围内是唯一的

所以我需要做的是找到所有 mm_id 不为 NULL 且 mm_id、s_id 和 c_id 有重复行的消息。

那么,如何编写查询来快速解决这个问题?我想在 s_id 上设置一个随机值,只要它是一个整数,因为我不在乎这个值是什么。

【问题讨论】:

    标签: mysql ruby-on-rails activerecord


    【解决方案1】:

    您的查询应该是查找重复的行:

    Message.joins("INNER JOIN 
                   ( SELECT mm_id, s_id, c_id, COUNT(*) total_count
                     FROM messages GROUP BY mm_id, s_id, and c_id
                     HAVING  COUNT(*) >= 2
                   ) b ON messages.mm_id = b.mm_id AND
                     messages.s_id = b.s_id AND messages.c_id = b.c_id"
                 )
            .where("messages.mm_id IS NOT NULL")
            .select("messages.*, b.total_count AS duplicate")
    

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 2015-08-05
      • 2013-10-08
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2023-01-05
      • 2019-05-07
      相关资源
      最近更新 更多