我有以下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;
=>有没有人比我现在能找到的更好(更快)的陈述? 感谢。
答案 0 :(得分:0)
尝试使用此替换第一个更新查询:
UPDATE tuples t1
LEFT JOIN tuples t2 on t2.child=t1.parent
SET t1.root=0
WHERE t2.parent is NULL
相关子查询可能非常慢。我想尽可能用JOIN替换它们。如果这对您有用,则类似的方法也可以重新设置第二个更新查询。