我有这个问题。 它的作用是获取 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 的组。
有什么办法可以让这个查询运行得更快? 通过加入什么的。
答案 0 :(得分:1)
您使用 Perl 的事实不太可能与这个问题有任何关系(当然,您可以通过在 mysql
命令行程序中运行查询而不是通过 Perl 程序来证明这一点).
我推荐阅读 MySQL documentation on optimising queries。我怀疑您最终会向表中添加索引。