高效SQL攻略



1.FROM子句里的表
 一般来说,把较小的表列在前面,把较大的表列在后面,就会获得更好的性能。

2.结合条件的次序
 大多数结合使用一个基表链接到具有一个或多个共有字段的其他表,基表是主表
 查询里的大多数或全部表都与它结合,通常,在WHERE子句里来自基表的字段一般
 放到结合操作的右侧,要结合的表还是按照从小到大的次序排列。
 
3.最严格条件
 最严格的条件就是:WHERE子句里返回最少记录的条件,与之相反,最宽松的条件就是
 语句里返回最多记录的条件。
 
 一般要把最严格的条件放在WHERE语句的末尾,从而让优化器首先读取它
 下面举例说明:
  WHERE LAST_NAME = 'SMITH';返回2000条记录
  WHERE CITY = 'INDIANAPOLIS';返回3000条记录
   那么,最严格的条件就是“WHERE LAST_NAME = 'SMITH'”
 
 从实践总结出来的经验表明,最好使用具有索引的字段作为查询里的最严格条件,索引
 通常会改善查询的性能。
 
4.全表扫描与索引
 在没有索引时,就会发生全表扫描;
 全表扫描一般比索引慢;
 最简单的避免全表扫描的方式就是在WHERE子句里设置条件来过滤返回的数据;
 全表扫描对于查询小型表或返回表里面大部分记录是高效的;
 下面是应该被索引的数据:
  作为主键的字段;
  作为外键的字段;
  在结合表里经常使用的字段;
  经常在查询里作为条件的字段;
  大部分唯一值得字段;
  
5.避免使用OR操作符
 在SQL语句里用谓词IN代替OR操作符能够提高数据检索速度,下面举例说明:
 SELECT EMP_ID
 FROM EMPLOYEE_TBL
 WHERE CITY = 'INDIANAPOLIS'
  OR CITY = 'BROWNSBURG'
  OR CITY = 'GREENFIELD'
 下面是用一个查询,使用了IN:
 SELECT EMP_ID
 FROM EMPLOYEE_TBL
 WHERE CITY IN('INDIANAPOLIS','BROWNSBURG','GREENFIELD')
  这个连个SQL返回结果相同,测试发现,用IN代替OR后,检索数据的速度明显提高了。
  
6.避免使用HAVING子句
 如果需要使用,最好尽可能地使其中的限制条件简单化。
 
7.避免大规模排序操作
 使用ORDER BY,GROUP BY,HAVING等。
 
8.使用存储过程
 可以为经常运行的SQL语句(特别是大型事务或查询)创建存储过程,所谓存储过程就是
 经过编译的,以可执行格式永久保存在数据库里的SQL语句,以类似于数据库对象的形式管理。

9.在批量加载操作前后删除并重建索引是一个优点,同时可以减少索引碎片,批加载可能包含
 数百,数千或数百万操作语句或事物。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值