内连接和in()子句的性能在哪里?

oca*_*nal 9 mysql sql inner-join

我可以为这些查询得到相同的结果,但哪一个是最快,最有效的?

在()或内部连接的位置?

SELECT `stats`.`userid`,`stats`.`sumpoint` 
FROM  `stats` 
INNER JOIN users
ON `stats`.`userid` = `users`.`userid` 
WHERE `users`.`nick` =  '$nick'

ORDER BY `statoylar`.`sumpoint` DESC  limit 0,10
Run Code Online (Sandbox Code Playgroud)

SELECT `stats`.`userid`,`stats`.`sumpoint` 
FROM  `stats` 
WHERE userid
IN (
SELECT userid
FROM  `users` 
WHERE  `users`.`nick` =  '$nick'
)
ORDER BY `stats`.`sumpoint` DESC  limit 0,10
Run Code Online (Sandbox Code Playgroud)

Ste*_*ung 13

取决于您的SQL引擎.具有合理查询优化器的较新SQL系统很可能会将两个查询重写为同一计划.通常,使用连接(第一个查询)重写子查询(第二个查询).

在可能没有很好的查询优化器的简单SQL引擎中,连接应该更快,因为它们可以在运行外部查询之前将子查询运行到临时内存表中.

但是,在一些内存占用有限的SQL引擎中,子查询可能更快,因为它不需要连接 - 这会产生更多数据.

总而言之,这取决于.


diE*_*cho 5


要检查性能,请使用EXPLAIN SELECT .... AFAIK 执行两个查询,比 顺便说一句您的表引擎类型INNER JOIN更快,或者IN
MYISAMINNODB