mysql选择父级有值的子级(最佳查询)

4si2a6ki  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(323)

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个子查询。现在我想知道在这种情况下,什么查询是最好的选择(查看性能)。

1l5u6lss

1l5u6lss1#

最好的查询是

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 索引通常比嵌套查询更有效,但这取决于许多其他参数(索引只是其中之一)。

相关问题