MySQL选择父项具有值的子项(最佳查询)

时间:2018-05-21 10:05:32

标签: mysql

stackoverflow上的某个人询问如何选择父级具有特定值的所有子级。

我想出了这个答案:

SELECT label, parent_id 
FROM folders 
WHERE parent_id IN (SELECT id FROM folders WHERE uniq='w2d4f6')

其他人回答了这个想法:

SELECT b.label, b.parent_id
FROM folders a, folders b
WHERE a.uniq = 'w2d4f6' AND b.parent_id = a.id

这些查询的结果是一样的。

当我对这些查询使用EXPLAIN时,它们都使用2个子查询。现在我想知道在这样的情况下什么查询是最好的选择(看性能)。

1 个答案:

答案 0 :(得分:1)

最好的查询是

SELECT b.label, b.parent_id
FROM folders a
INNER JOIN folders b ON b.parent_id = a.id
WHERE a.uniq = 'w2d4f6' 

它应该与您提供的第二个查询具有相同的执行计划,但它符合ANSI-92 SQL。

JOIN通常比嵌套查询更有效,但这取决于许多其他参数(索引只是其中之一)。