关闭

高效SQL攻略

176人阅读 评论(0) 收藏 举报
分类:


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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:55177次
    • 积分:1884
    • 等级:
    • 排名:千里之外
    • 原创:133篇
    • 转载:22篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论