今天在讨论如何优化sql语句的时候,有一个用exists 代替in 的方案,但具体写的时候没有使用过,尝试了一下出错了
出错代码如下:
SELECT * FROM `emp` a
where exists(
SELECT * from emp t
where t.id=11
)
改正后如下:
SELECT * FROM `emp` a
where exists(
SELECT * from emp t
where t.id=11 and a.id=t.id
)
具体的原因上网查阅说是exists后面跟的子查询是一个独立的查询系统;要加上一个能关联外查询的条件;
附上如何优化SQL:
SQL语句优化:
1.建议少用‘*’代替所有列
2.用exists代替in
3.连表查询的时候尽量减少表的查询次数
4.用truncate代替delete(删除全表数据)
5.合理使用索引(详见索引)
6.sql语句尽量大写,Oracle会把所有语句转换成大写在执行
7.在保证语句完整的情况下,多使用commit(多用于begin…end中)
8.优化group by,将不需要的数据尽量在group by之前过滤掉,避免使用having
9.连表查询是尽量使用表的别名,减少解析时间
10.表连接在where之前,where条件能够过滤更多数据的条件放在最开始