程序员不可不知的SQL查询优化系列之IN关键词优化

当子查询的时候,使用EXISTS替代IN。

IN的使用频率很高,因为语义性很强,很好理解。但是可能成为查询的瓶颈,因为IN是执行的全表扫描,所以一般优化代码中含有IN的语句就能大幅度提高性能。

如果IN是数值列表,那么不需要过多注意,如果是子查询,就要进行优化。

为什么使用EXISTS优化?理由如下:

  • 如果在关联列上建立了索引,那么查询子关联表的时候,不需要查询实际表,只需要查询索引即可。
  • 使用EXISTS,只要查询一行满足条件就会终止查询。

IN是扫描全表。当IN子句是查询的时候,那么数据库会优先执行子查询,并且会将结果存在一张临时表中(内联视图),然后扫描整个视图。这种操作会非常消耗资源。

还有一种方式就是使用连接代替IN,但是大多数情况下EXISTS更好!

你可能感兴趣的:(程序员不可不知的SQL查询优化系列之IN关键词优化)