【发布时间】:2016-07-15 09:37:22
【问题描述】:
考虑以下架构:
Tables: Tasks (tid, jobid, status, name)
Jobs(jobid, submitTime)
在这里,我可以使用一个 jobid 来处理多个任务表行。现在我想从 Tasks 表中获取所有行,这样它们的 status=5 并且所有其他具有相同 jobid 的行也应该是 5。
例如:我在任务中有 5 行,前 2 行 jobid=1 和 status=5,最后 3 行 jobid=2 和两个 status=5 和 1 status=4。我的查询应该只返回 jobid=1 的前两行,因为 jobid=1 的所有行的 status=5。不应返回 jobid=2 的行,因为 jobid=2 的一行的 status=4。
假设我在 Tasks 表中有大约 300K 行,我需要帮助来构建优化查询。
mysql> select * from task;
+--------+-------+--------+----------------------+
| taskid | jobid | status | name |
+--------+-------+--------+----------------------+
| 1 | 1 | 5 | Task 1, Job 1 |
| 2 | 1 | 5 | Task 2, Job 1 |
| 3 | 2 | 5 | Task 3, Job 2 |
| 4 | 2 | 5 | Task 4, Job 2 |
| 5 | 2 | 4 | Task 5, Job 2 status |
+--------+-------+--------+----------------------+
5 rows in set (0.00 sec)
mysql> select * from job;
+-------+---------------------+
| jobid | time |
+-------+---------------------+
| 1 | 2016-07-15 15:13:42 |
| 2 | 2016-07-15 15:13:44 |
+-------+---------------------+
我需要的输出:
+--------+-------+--------+----------------------+
| taskid | jobid | status | name |
+--------+-------+--------+----------------------+
| 1 | 1 | 5 | Task 1, Job 1 |
| 2 | 1 | 5 | Task 2, Job 1 |
【问题讨论】:
-
请编辑您的问题以将输入和所需输出显示为表格。我无法将您的描述翻译成表格形式。
-
jobs表与您的问题有何关联? -
@TimBiegeleisen 已添加
-
@mitkosoft 您可以说它不相关,并将 jobid 假定为独立值。但我的查询需要,如果两行具有相同的 jobid 但其中一个具有状态!=5,则不应从输出中返回这两行。
-
似乎一个简单的
WHERE子句应该可以工作。如果不是,那么您的示例不会显示查询中的更多复杂性。在那里扔一些索引,然后就可以了。
标签: mysql database query-optimization