我有两个sql查询,它们输出相同且正确的结果。我需要帮助来理解为什么一个查询比另一个查询花费更多的时间。
sql查询是嵌套查询
SELECT DISTINCT p.name
FROM people p INNER JOIN stars s
ON p.id = s.person_id
AND movie_id IN ( SELECT movie_id
FROM stars ss
WHERE ss.person_id = ( SELECT id
FROM people pp
WHERE pp.name = 'Kevin Bacon' AND pp.birth = 1958 )
)
AND NOT (p.name = 'Kevin Bacon' AND p.birth = 1958)
ORDER BY name ASC
此查询大约需要4秒钟才能从15万行中获取结果
查询使用联接
SELECT DISTINCT pp.name
FROM
people p JOIN stars s ON p.id = s.person_id JOIN
stars ss ON s.movie_id = ss.movie_id JOIN
people pp ON pp.id = ss.person_id
WHERE p.name = 'Kevin Bacon' AND p.birth = 1958 AND p.id IS NOT pp.id
ORDER BY pp.name ASC
这个查询大约需要40秒来获取记录。我想使用这个查询,但它是相当慢,有没有任何方法来优化这个查询。
1条答案
按热度按时间dgtucam11#
尝试在表(或索引)上添加主键
您可以查看explain平原查看如何优化查询,在explain平原中您可以查看查询行为并发送给我们以获取更多帮助。