MySQL优化长IN语句


MySQL Optimizing long IN statement

我有一个名为PARENTTABLE(id,…)的项目表

我还有一个名为CHILDTABLE(id,parent_id,…)的项目表带有对PARENTTABLE中项目的引用列。

如何编写一个只从PARENTTABLE中获取项目的查询,而这些项目在CHILDTABLE中肯定有引用。

目前我正在使用:

SELECT * FROM PARENTTABLE WHERE id IN (SELECT parent_id FROM CHILDTABLE)

这是一种可接受的方法吗?还是有一种更优化的方法,因为随着时间的推移,最终会有许多条目进入CHILDTABLE,使IN语句变得很长。

SELECT DISTINCT PARENTTABLE.* 
FROM PARENTTABLE
INNER JOIN CHILDTABLE ON CHILDTABLE.parent = PARENTTABLE.id

试试这样的东西:

SELECT * from parent where id in (Select distinct parentid from child)

带有EXISTS 的版本

SELECT * 
  FROM parenttable p
 WHERE EXISTS
(
  SELECT *
    FROM childtable
   WHERE parent_id = p.id
)

这是SQLFiddle演示