MYSQL LEFT JOIN选择增强

账单

我正在做一个选择与左联接只是想知道我是否做正确。

我有两个表,一个工作表和一个工作分配表,我想选择工作创建者,也要选择已分配的工作。以下代码我已将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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章