1.概述
sql语句中exists和in有何区别? SQL语句优化有哪些方法?
sq|语句中exists和in有何区别如下:
exists是用循环( loop )的方式,由outer表的记录数决定循环的次数,对于exists影响最大,所以,外表的记录数少,适合用exists ; in先执行子查询,子查询的返回结果去重之后,再执行主查询,所以,子查询的返回结果越少,越适合用该方式。
SQL语句的优化方式如下:
- 尽量避免非操作符的使用。在索引列上使用NOT、<> 等非操作符,数据库管理系统是
不会使用索引
的,可以将查询语句转换为可以使用索引|的查询。 避免对查询的列的操作
。任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。避免不必要的类型转换
。需要注意的是,尽量避免潜在的数据类型转换。如将字符型数据与数值型数据比较,会自动将字符进行转换,从而导致全表扫描。增加查询的范围限制
。增加查询的范围限制,避免全范围的搜索。- 合理使用IN与EXISTS。例如: 有A, B两个表,它们分别使用如如下情况:
5.1. 当只显示一一个表的数据如A,关系条件只一个如ID时,使用IN更适合,SQL语句如下:
SELECT * FROM A WHERE i