在一次实际的业务中,检查SqlServer性能报表,客户的一个操作非常慢,检查报表后发现一个插入语句执行了11S,一个保存业务竟然有这么慢的SQL语句,检查发现是前辈在Insert into中使用了Not in。这里也不废话了想知道NOT IN为什么慢去百度一下吧,我就不说了。
后来我改写NOT IN为LEFT JOIN 整个插入由11S降到1S以内。我举个例子吧
not in 的写法:SELECT * FROM A WHERE ID NOT IN (SELECT ID FROM B),优化后是:select * from A LEFT JOIN B ON A.id=B.id where b.value is null
这两句效果是一下的可是在数据过多的情况下性能有10倍之差。我记得实际环境中表数据只有10000多条。