从第二个表开始计数时 MySQL 查询速度问题

标签 mysql count performance

因此,我在使用左连接来计算另一个表中的工单评论时遇到了严重的速度问题。我尝试在计数字段中使用子选择,并且具有完全相同的性能。

根据计数,查询大约 30 个票证大约需要 1 秒,对于 19000 个票证则需要 5 秒(我既有生产服务器又有开发服务器,所以时间有点偏差)。我正在尝试对此进行优化,因为每次刷新页面时都需要运行四种不同的查询。

如果没有计数,我发现执行时间从 1 秒下降到 0.03 秒,因此这个计数肯定会在所有票证上运行,而不仅仅是所选的票证。

这是相关查询的精简版本:

            SELECT  tickets.ticket_id,
                            ticket_severity,
                            ticket_short_description,
                            ticket_full_description,
                            count(*) as commentCount,

            FROM    tickets (LEFT JOIN tickets_comment on ticket_id = tickets_comment.ticket_id)

            WHERE   ticket_status='Open'
              and   ticket_owner_id='133783475'

            GROUP BY
                    everything,
                    under,
                    the,
                    sun

现在,并非所有票证都有评论,因此我不能只进行正确或标准连接。这样做时,速度相当不错(当前的 1/10),但不包括任何没有评论的票证。

我看到了三个解决方案,并且希望得到您的任何建议。

  1. 创建新列 comment_count 并对新评论使用触发器/更新查询
  2. 使用用户界面并即时获取评论(不是真正想要的)
  3. 希望 stackoverflow 的人们有一个更优雅的解决方案:þ

想法?

最佳答案

一位同事前来救援。该查询只是不正确地使用了连接。

这里必须做的是创建第二个表,其查询如下:

select count(*) from tickets_comment group by ticket_id where (clause matches other)

这将创建一个表,其中包含每个票证 ID 的计数。然后将该表与票证 ID 匹配的票证表连接起来。它不像创建新列那么快,但至少是原来速度的 1/10,所以我很高兴。

最后一步是将空值(没有评论的票证)转换为零

关于从第二个表开始计数时 MySQL 查询速度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1841039/

相关文章:

php - 如何将一个表中的帖子添加到另一个表中的类别?

php - 使用 fopen 打开数据库中的文件

mysql - 慢查询需要 .0007 秒?为什么这会出现在我的慢日志中?

mysql - 计算特定月份的条目

python - 按行值 pandas 的特定组合计算行数

sql - PSQL 在同一行上按多个条件分组

jquery - 性能:纯 CSS 与 jQuery

mysql - 如何使用多个表内连接和分组依据来获取两个值的计数?

python - 检查行(列表列表中)的最后一个元素是否在另一个列表中找到的有效方法?

python - 用于文件操作的 R 或 Python