代码之家  ›  专栏  ›  技术社区  ›  Zak

编写此MySQL查询的更有效方法

  •  0
  • Zak  · 技术社区  · 3 年前

    我正试图加快查询速度,但考虑到数据量太大,恐怕这是不可能的。但我决定把它扔出去,看看有没有人有什么建议。我有两个非常简单的表格:

    承包人

    身份证件 承包人
    约翰的屋顶
    2. 马克的屋顶

    提交表格

    身份证件 屈服
    1. ...
    2.
    3. ...
    4. ...
    1. ...
    6. 5.

    计数 意见书的数量。即

    SELECT a.id, a.contractor, count(b.contractor_id) AS submission_count
       FROM `contractorList` a
       LEFT JOIN contractor_form_submissions b
          ON b.contractor_id = a.id
       GROUP BY a.id
       ORDER BY a.contractor
    

    LEFT JOIN count() 他们提交的资料(每个承包商可能有数千份)让人质疑。。就像几分钟,而不是几秒钟。是否有一种更有效的只使用SQL的路由来获取计数,而无需永远使用查询?

    笔记 那个 contractorList.id form_submissions.id 都是 PK indexed

    1 回复  |  直到 3 年前
        1
  •  1
  •   Barmar    3 年前

    最好在加入之前进行聚合,因为这样会创建一个较小的中间表。

    SELECT a.id, a.contractor, IFNULL(b.submission_count, 0) AS submission_count
    FROM contractorList AS a
    LEFT JOIN (
        SELECT contractor_id, COUNT(*) AS submission_count
        FROM contractor_form_submissions
        GROUP BY contractor_id
    ) AS b ON a.id = b.contractor_id
    ORDER BY a.contractor