查询运行时间过长

时间:2021-03-08 11:12:46

标签: mysql sql

我有这个问题。 它的作用是获取 bug id 和在给定的日期范围和其他条件内完成这些 bug 所花费的时间。 这需要太多时间来处理。 表 bugs,bugs_activity 由大量数据组成。

<div id="first">
  <p>A</p>
  <p>B</p>
  <p>C</p>
  <p>D</p>
  <p>E</p>
  <p>F</p>
  <p>G</p>
</div>


<div id="second">
  <p>Loader</p>
</div>

<button>Replace</button>

查询运行:

my $query = "SELECT COUNT(b.bug_id) as cntBugId, SUM(TIME_TO_SEC(TIMEDIFF(ba.bug_when,b.creation_ts)))/60
                 AS time_taken FROM techzilla.bugs b, techzilla.bugs_activity ba WHERE b.bug_id=ba.bug_id
                 AND b.bug_status='RESOLVED' AND b.resolution='FIXED' AND ba.added='RESOLVED' AND b.creation_ts
                 BETWEEN '$from' AND '$to' AND b.bug_id IN (SELECT DISTINCT b.bug_id
                 FROM techzilla.bugs b, techzilla.bugs_activity ba, techzilla.user_group_map_stats u,
                 techzilla.profiles p WHERE ba.bug_id=b.bug_id AND b.bug_status='RESOLVED' AND b.resolution='FIXED'
                 AND ba.added='RESOLVED' AND b.creation_ts BETWEEN '$from' AND '$to' AND p.userid=b.assigned_to
                 AND p.userid=u.user_id AND u.group_id='$groupId')";

mysql> SELECT COUNT(b.bug_id) as cntBugId, SUM(TIME_TO_SEC(TIMEDIFF(ba.bug_when,b.creation_ts)))/60 AS time_taken FROM techzilla.bugs b, techzilla.bugs_activity ba WHERE b.bug_id=ba.bug_id AND b.bug_status='RESOLVED' AND b.resolution='FIXED' AND ba.added='RESOLVED' AND b.creation_ts BETWEEN '2020-12-17 00:00:00' AND '2021-01-09 23:59:59' AND b.bug_id IN (SELECT DISTINCT b.bug_id FROM techzilla.bugs b, techzilla.bugs_activity ba, techzilla.user_group_map_stats u, techzilla.profiles p WHERE ba.bug_id=b.bug_id AND b.bug_status='RESOLVED' AND b.resolution='FIXED' AND ba.added='RESOLVED' AND b.creation_ts BETWEEN '2020-12-17 00:00:00' AND '2021-01-09 23:59:59' AND p.userid=b.assigned_to AND p.userid=u.user_id AND u.group_id='106'); +----------+--------------+ | cntBugId | time_taken | +----------+--------------+ | 12249 | 1739767.0167 | +----------+--------------+ 1 row in set (7.74 sec) 由许多带有主键 bug_id 的条目组成。 表 bugs 包含某人对 bugs_activity 表中存储的错误所做的更改。 查询会根据错误创建日期 e.t.c

遍历 bugs 表中列出的所有错误

每个错误都属于一个具有唯一 ID 的组。

有什么办法可以让这个查询运行得更快? 通过加入什么的。

1 个答案:

答案 0 :(得分:1)

您使用 Perl 的事实不太可能与这个问题有任何关系(当然,您可以通过在 mysql 命令行程序中运行查询而不是通过 Perl 程序来证明这一点).

我推荐阅读 MySQL documentation on optimising queries。我怀疑您最终会向表中添加索引。