如何正确进行多个连接? MySQL的

时间:2014-07-15 12:28:14

标签: mysql inner-join

我想运行此查询:

SELECT * FROM business
INNER JOIN permissions
       AS status1 ON (business.status1 = permission.permission AND permissionType ="status1")
INNER JOIN permissions
       AS status2 ON (business.status2 = permission.permission AND permissionType= "status2")

注意:我在同一个表之间进行多次连接!

此查询运行没有错误,但它很慢?如何改进?

1 个答案:

答案 0 :(得分:1)

Juergen有正确的想法。您需要索引表格中的正确列。在您的实例中,我将索引business.status1和business.status2,以及permissions.permissionType。请注意,有多种索引,因此您必须研究它正在寻找的内容。

此外,您还有SELECT *。这将选择业务表中的所有列,权限表中的所有列,然后再次从权限表中选择所有列。这可能根本不是必要的,所以我建议将其缩小一点。

作为额外的想法,您还可以稍微更改查询的结构:

SELECT * FROM business
INNER JOIN permissions
    AS status1 ON (business.status1 = permission.permission)
INNER JOIN permissions
    AS status2 ON (business.status2 = permission.permission)
WHERE  status1.permissionType = "status1"
    AND status2.permissionType = "status2"

我不知道这对任何事都有帮助,但总的来说,我喜欢将我的联接限制在一个单一的联系点。

至于命令的实际语法,您正在正确地进行连接。在这一点上,它只是一个速度问题,为了解决这个问题,我建议使用合适的索引。