如何解决使用连接运行查询的替代方法
我有以下查询:
select m.name,m.surname,m.teacher,c.classroom,c.floor
from table1 as m
inner join table2 as c
on (m.name=c.name or m.surname = c.surname);
但是执行查询需要很多时间。我想问一下有没有其他的运行方式。
在我停止之前,查询尝试获取的行也是 ~47b。
如果查询确实是交叉连接而不是内部连接,那么这个结果是合理的。
每个表有 14m 行。
解决方法
OR
子句中的 ON
确实减慢了速度。您可以使用两个 LEFT JOIN
:
select m.name,m.surname,m.teacher,coalesce(cn.classroom,cs.classroom) as classroom,coalesce(cn.floor,cs.floor) as floor
from table1 m left join
table2 cn
on m.name = cn.name left join
table2 cs
on m.surname = cs.surname
where cn.name is not null or cs.surname is not null
,
使用 OR 运算符运行连接查询会导致 DBMS 的执行计划不是最佳。
试试这个:
select m.name,c.classroom,c.floor
from table1 m inner join table2 as c
on m.name = c.name
UNION
select m.name,c.floor
from table1 m inner join table2 as c
on m.surname = c.surname
考虑你必须在两个表的 name 和 surname 上声明索引
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。