管理MySQL数据的一些SQL小技巧

MySQL针对多表数据的DML一般比较低效,特别是in语句,大数据量下基本就不能使用,一般关联多表情况的增删改可以用类似如下的SQL来实现,当然,这种复杂的SQL在应用程序里是应该尽量避免的。列举几个小例子:

delete a from ta a, tb b where a.fid=b.fid and a.fls_id=b.fls_id;

update ta a,tb b set a.name=a.uname where a.uid=b.id;

update ta p,(select feed_id as id,sum(c) as c from ta group by feed_id) c set p.co=c.co where c.id=p.id;

update user u,tc c set u.username=substring(u.username,1,instr(u.username,’(‘)-1)
where u.id=c.id

在Oracle中,表连接有NL(Nested Loop)、HJ(Hash Join)和SMJ(Sort Merge Join)等方式,而在MySQL中,只有NL一种方式,所以就是拿驱动表的结果集做循环,去另外一个表里查数据。

另外,保证被驱动表的条件有索引很重要,一般被驱动表比较大,没有索引的查询会非常慢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>