凤来仪

专业的计算机学习网站

首页 > mysql优化使用连接join代替子查询

mysql优化使用连接join代替子查询

点击:421 发布时间:
MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示: DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )   使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成: SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )   如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下: SELECT * FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. CustomerID WHERE salesinfo.CustomerID IS NULL   连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作

MSSQL中的语句:
update product set s_date='$theTime',baojia_date='$theTime' where u_name in(select u_name from comp_info where yijian=1)
在ASP+MSSQl中时,使用挺快的。放到PHP+Mysql里时就很慢。
Mysql中换用join语句。秒开了。(为yijian创建了索引)
update product set s_date='$theTime',baojia_date='$theTime' left outer join comp_info on product.u_name=comp_info.u_name where comp_info.yijian=1