提高MySQL自联接语句的效率

时间:2015-03-19 09:33:22

标签: mysql

我有以下MySQL元组表,需要知道该行是否包含使用2个SQL语句的根或叶。

SQL语句有效,但速度极慢(每个语句在专用的RHEL Web服务器上占用100k行表大约需要6个小时),所以我想了解如何提高性能。

决策 - > root意思是'child'中的任何表行中找不到'parent'值,而leaf表示'parent'中任何表行中找不到'child'值的地方。

表'元组'......

parent   varchar(20),
child    varchar(20),
root     boolean,
leaf     boolean

表格是在唯一的父级+子级上编制的。

该表设置为root和amp;的默认值。叶子真实。

第一个SQL语句查找不是根的行,第二个查找不是叶子的行。

update tuples t1 inner join tuples t2 on (t1.parent in (select t2.child)) set t1.root=false;

update tuples t1 inner join tuples t2 on (t1.child in (select t2.parent)) set t1.leaf=false;

=>有没有人比我现在能找到的更好(更快)的陈述? 感谢。

1 个答案:

答案 0 :(得分:0)

尝试使用此替换第一个更新查询:

UPDATE tuples t1
    LEFT JOIN tuples t2 on t2.child=t1.parent
SET t1.root=0
WHERE t2.parent is NULL

相关子查询可能非常慢。我想尽可能用JOIN替换它们。如果这对您有用,则类似的方法也可以重新设置第二个更新查询。