我正在做一个选择与左联接只是想知道我是否做正确。
我有两个表,一个工作表和一个工作分配表,我想选择工作创建者,也要选择已分配的工作。以下代码我已将1用作ID。
JOB Table
++++++++++
id
user_id (capture creator id)
title
JOB ASSIGN TABLE
++++++++++
id
job_id
user_id (capture assign id)
========
SELECT
a.id,
a.title
FROM
job a
LFET JOIN job_assign b
ON
a.id = b.job_id
WHERE
(
a.user_id = 1
OR
b.user_id =1
)
上面的查询有效,但速度有点慢,当我检查Explain时
1
SIMPLE
b
ALL
NULL
NULL
NULL
NULL
358
Using where; Using temporary; Using filesort
无论如何,有没有增强我的查询,对我来说将是一个很好的教训:)
索引会有所帮助(@Volkan Ulukut建议的索引将大大加快连接速度),但是作为单个查询,WHERE子句中的OR将使MySQL难以使用索引。
可能值得将其分为2个查询,然后将结果合并在一起:
SELECT a.id, a.title
FROM job a
WHERE a.user_id = 1
UNION
SELECT a.id, a.title
FROM job_assign b
INNER JOIN job a
ON a.id = b.job_id
WHERE b.user_id = 1
如果在添加以下索引之后执行此操作,则希望它会更快:-
CREATE INDEX job_user_id ON job (user_id);
CREATE INDEX job_assign_user_id ON job (user_id);
通过这种方式,它可以使用职位名称上的索引来检查用户ID,在查询的第二部分,可以使用用户ID上的索引从job_assign中获取行,然后使用ID上的索引(我假设是主键),以便表作业进行联接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句