今天用到要查询七天内都没有装机的门店信息,首先想到了用not in,先把装机的userid查出来,然后再id not in,但是这样就必须使用子查询,数据量少还可以,数据量大了的话,肯定效率特别低,因为MySQL需要为内层查询语句的查询结果建立一个临时表.然后外层查询语句再临时表中查询记录.查询完毕后,MySQL需要撤销这些临时表.因此,子查询的速度会受到一定的影响.如果查询的数据量比较大,这种影响就会随之增大. 首先使用: select * from v9_wba_account where…
开发人员给了一个sql ,结构如下delete from B where ID in (select NID from H where guid='xxx'); 内部sql满足条件的结果集只有一条,但是整个删除操作执行了将近1分钟,如果是将结果集放在括号里或者将in改为= ,执行的速度可以实现毫秒级别 但是如果内部查询结果集多于一行,采用第一种方案的话需要更改程序,后来又试了一种更改为join,速度也是极快. 测试表,t1.id上有索引,t2.id无索引 mysql> select * from…
,,,) ) LIMIT 第一种方式in where:2000ms SELECT COUNT(*) AS tp_count FROM xxx_b2c_orders o ,,,) and from xxx_invite_invite i , , ) ); 第二种方式exists:1600ms ,,,) ,,) 第三种方式join:110ms 效果非常明显…
当你在用explain工具查看sql语句的运行计划时.若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了.你已经掉入了mysql子查询慢的"坑"... 以下我们来看一个详细的样例 有这样一条查询语句: SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid IN (SELECT gid FROM shop_goods g2 WHERE…