我想运行此查询:
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")
注意:我在同一个表之间进行多次连接!
此查询运行没有错误,但它很慢?如何改进?
答案 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"
我不知道这对任何事都有帮助,但总的来说,我喜欢将我的联接限制在一个单一的联系点。
至于命令的实际语法,您正在正确地进行连接。在这一点上,它只是一个速度问题,为了解决这个问题,我建议使用合适的索引。