select mgs.goods_id, mgs.specs_def_path from mall_goods_specs mgs left join mall_goods mg on mgs.goods_id = mg.goods_id where mg.goods_id is null 优化SQL
时间: 2023-10-05 15:13:49 浏览: 113
MGS-Machinery-master.rar_CrankSlider.cs_MGS-Machinery_machinery
在这个SQL语句中,使用了 `left join`,查询了 `mall_goods_specs` 表中的 `goods_id` 和 `specs_def_path` 字段,同时还查询了 `mall_goods` 表中的 `goods_id` 字段。然后,通过 `where` 子句筛选出在 `mall_goods` 表中不存在的记录。
这个查询语句的性能瓶颈可能在于使用了 `left join`,它会将两个表中的所有记录都进行匹配,然后再通过 `where` 子句筛选出符合条件的记录。如果数据量较大,这样的查询可能会比较耗时。因此,我们可以考虑使用 `not exists` 子句来优化这个查询,如下所示:
```
select mgs.goods_id, mgs.specs_def_path
from mall_goods_specs mgs
where not exists (
select 1 from mall_goods mg where mgs.goods_id = mg.goods_id
);
```
在上面的查询中,我们只查询了 `mall_goods_specs` 表,然后使用 `not exists` 子句查询在 `mall_goods` 表中不存在的记录。这样可以避免 `left join` 带来的性能问题。
阅读全文