SQL使用中的优化

可以参照博文: http://www.nowamagic.net/librarys/veda/detail/1502

1、选择最有效的表明顺序(仅适用于RBO模式)

****不同的数据库的解析器对from后的跟的表名处理顺序有所不同----记录数量最小的放在最右端****

2、select 查询中避免使用“*”

3、尽量减少访问数据库次数。

4、删除重复记录

5、多使用Exists,少使用IN

1

SELECT PUB_NAME FROM PUBLISHERS

2

WHERE PUB_ID IN

3

(SELECT PUB_ID FROM TITLES WHERE TYPE = ‘BUSINESS‘)

可以用下面语句代替:


1

SELECT PUB_NAME FROM PUBLISHERS WHERE EXISTS

2

(SELECT 1 FROM TITLES WHERE TYPE = ‘BUSINESS‘ AND

3

PUB_ID= PUBLISHERS.PUB_ID)


 in和exists的区别与执行效率问题


例子:

select * from T1 where T1.id in (select T2.id from T2);

select * from T1 where exists(select 1 from T2 where T2.id = T1.id);

忠告:

若T2中的数据量明显少用in比用exists合适

若T2中的数据量明显多用exists比用in合适


总结:IN把外表和内表做hash  join  ,而exists对外表做loop(循环遍历),每次loop再对内标进行查询。这样一来,in适合内外表都很大的情况,exists适合外表结果集比较小的情况。


本文出自 “丑小鸭的天空” 博客,谢绝转载!

SQL使用中的优化,布布扣,bubuko.com

SQL使用中的优化

上一篇:SQL使用笔记一


下一篇:mysql事件调度器定时删除binlog