一尘不染

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

mysql

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

in()或内部联接在哪里?

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

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

阅读 245

收藏
2020-05-17

共1个答案

一尘不染

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

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

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

因此,总而言之,这取决于。

2020-05-17