sql语句优化-左连接和子查询

现有a,b,c表需要连表查询,a表是主表接近百万数据,b,c表只有几百条,

select a.x, b.x, c.x from a left join b on a.key = b.key left join c on a.key = c.key where ...

修改之后

select a.x, (select b.x from b where b.key = a.key) y, (select c.x from c where c.key = a.key) z where ...

修改之前sql运行需要大概16.3s,修改之后大概0.8秒,

原因:计算方式问题,左连接会先连接再查询,会形成很大的笛卡尔积,而子查询会分两次查询,当主表数据量大,副表数据量小时候优先使用子查询,

本人代码原图:Oracle代码

 

sql语句优化-左连接和子查询_第1张图片

你可能感兴趣的:(数据库)