mysql - 查询运行时间过长
问题描述
我有这个疑问。它的作用是在给定的日期范围和其他条件下获取错误 ID 和完成这些错误所需的时间。这需要太多时间来处理。表错误,bugs_activity 由大量数据组成。
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)
表bugs
由许多具有主键 bug_id 的条目组成。表包含一个人对存储在表bugs_activity
中的错误所做的更改。bugs
查询bugs
根据错误创建日期等遍历表中列出的所有错误
每个错误都属于具有唯一 ID 的组。
有什么办法可以让这个查询运行得更快?通过加入什么的。
解决方案
It's very unlikely that the fact you're using Perl has any bearing on this problem (and, of course, you can demonstrate that by running the query in the mysql
command line program instead of through a Perl program).
I recommend reading the MySQL documentation on optimising queries. I suspect you'll end up adding indexes to your tables.
推荐阅读
- wso2 - 将xml转换为json时wso2慢
- vue.js - 当 v-model 是道具时,V-dialog 不起作用
- reactjs - Redux action 的 as function 或 as constants 有什么区别
- java - 如何放心使用正则表达式
- azure-devops - 从 Github 服务连接获取 OAuth 令牌
- ios - 我想从 S3 存储桶安装 ipa。它被下载并尝试安装。但是安装失败
- string - PowerShell - 连接两个带有下划线的字符串不起作用?
- php - 在laravel中将对象转换为数组
- flutter - 带有条件的颤振显示弹出窗口
- java - Http 请求没有命中我的 Spring Boot 控制器