我正在尝试从同一个表中另一列中存在的一列中识别值
子查询
SELECT DISTINCT `Wear it With - Outfits 1`
FROM `product list`
WHERE `Wear it With - Outfits 1` NOT IN (SELECT `sku`
FROM `product list`)
...将结果返回2.7287sec
我尝试用左连接替换子查询
SELECT DISTINCT table1.`Wear it With - Outfits 1`
FROM `product list` as table1
LEFT JOIN `product list` as table2 ON table1.`Wear it With - Outfits 1`=table2.sku
WHERE table2.sku IS NULL
AND table1.`Wear it With - Outfits 1` IS NOT NULL
...将结果返回5.7651秒
通常加入返回结果的速度要快得多。所以我相信我在查询中做了一些有趣的事情? 但是找不到我的子查询运行速度比
更快的原因答案 0 :(得分:4)
声明'正常加入返回结果的速度要快得多'。是愚蠢的,特别是没有参考任何特定的数据库系统。
确定特定查询的性能有很多因素。您可以在任何正在使用的数据库产品中使用EXPLAIN工具来确定在这种情况下子查询的优选原因(提示:它可能与使用关键字DISTINCT有关)。
答案 1 :(得分:0)
主要原因是您的左连接语句未进行优化。
WHERE条件WHERE table2.sku IS NULL和table1。Wear it With - Outfits 1
IS NOT NULL
可能会浪费很多时间,特别是在这种情况下。
您应该在离开加入之前优化table2。
PS:表2中的记录数量应该达到相当大的数量。