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个子查询。现在我想知道在这样的情况下什么查询是最好的选择(看性能)。
答案 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
通常比嵌套查询更有效,但这取决于许多其他参数(索引只是其中之一)。