Mysql 子查询的运行速度比join快?

Mysql 子查询的运行速度比join快?,mysql,sql,join,subquery,Mysql,Sql,Join,Subquery,我试图从同一个表的另一列中的一个列中识别值 子查询 SELECT DISTINCT `Wear it With - Outfits 1` FROM `product list` WHERE `Wear it With - Outfits 1` NOT IN (SELECT `sku` FROM `product list`) …以2.7287秒的时间返回结果 我试图用左连接替换子查询 SE

我试图从同一个表的另一列中的一个列中识别值

子查询

SELECT DISTINCT `Wear it With - Outfits 1` 
  FROM `product list` 
 WHERE `Wear it With - Outfits 1` NOT IN (SELECT `sku` 
                                            FROM `product list`)
…以2.7287秒的时间返回结果

我试图用左连接替换子查询

   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秒

通常情况下,连接返回结果的速度要快得多。所以我相信我在询问中做了一些有趣的事情?
但是找不到我的子查询运行速度比语句“正常连接返回结果快得多”快得多的任何原因,特别是在没有引用任何特定数据库系统的情况下


决定特定查询性能的因素很多。您可以在使用的任何数据库产品中使用EXPLAIN工具来确定在这种情况下为什么子查询更可取(提示:它可能与关键字DISTINCT的使用有关)。

语句“通常连接返回结果的速度要快得多。”很愚蠢,尤其是在没有参考任何特定数据库系统的情况下


决定特定查询性能的因素很多。您可以在使用的任何数据库产品中使用EXPLAIN工具来确定在这种情况下为什么子查询更可取(提示:它可能与关键字DISTINCT的使用有关)。

主要原因是您的left join语句没有得到优化。 表2.sku为空且表1。
与-counts 1一起佩戴的WHERE条件不为空
可能会浪费很多时间,尤其是在这种情况下。
您应该在离开join之前优化表2。

PS:表2中的记录数应该达到相当大的数量。

主要原因是您的left join语句没有得到优化。 表2.sku为空且表1。
与-counts 1一起佩戴的WHERE条件不为空
可能会浪费很多时间,尤其是在这种情况下。
您应该在离开join之前优化表2。

PS:表2中的记录数量应该达到相当大的数量。

很抱歉没有描述数据库系统。我正在使用mysql,并通过phpmyadmin接口运行这些查询。关于distinct,我最初也有同样的疑问,但当我尝试删除查询时,仍然因为没有描述数据库系统而得到同样的结果。我正在使用mysql,并通过phpmyadmin接口运行这些查询。关于distinct,我最初也有同样的疑问,但当我尝试删除查询时,仍然得到了相同的结果,其中条件i无法删除table2。sku为Null是将not in子查询转换为join以供参考的基本方法()如果我删除table.wear with-Outfights 1,则查询所用的时间会有很大变化。从何处条件我无法删除table 2.sku为空,这是将不在子查询转换为联接以供参考的基本方法()如果我删除table.wear with-Outfights 1,则查询所用的时间会有很大变化。yeap,MySQL并通过phpMyAdmin运行这些查询您真的应该简化您的示例,而不是将“wear it with-Outfights 1”替换为“foo”或类似内容。这使得一开始很难看到您真正想要做的事情Yeap、MySQL和通过phpMyAdmin运行这些查询您真的应该简化您的示例,而不是用“foo”或类似的词替换“wear It with-Outfights 1”。这使得最初很难看到你实际上在做什么