优化sql 语句的几种方式
来源:互联网 发布:淘宝 3d试衣 编辑:程序博客网 时间:2024/04/29 19:49
1、 首先要搞明白什么叫执行计划?
执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用 “全表扫描”方式。
可见,执行计划并不是固定的,它是“个性化的”。产生一个正确的“执行计划”有两点很重要:
(1) SQL语句是否清晰地告诉查询优化器它想干什么?
(2) 查询优化器得到的数据库统计信息是否是最新的、正确的?
2、 统一SQL语句的写法:否则数据库会进行两次解析
3、 不要把SQL语句写得太复杂:以来,一旦解析失败,就得重新再来,二来,数据库有时会不能识别
4、 绑定变量窥测,就想hibernate 的hql语句一样, :原因:一次解析,多次使用、
5.只在必要的情况下才使用begin tran :因为启动事物期间,会全盘锁住sql语句所占用的表的字段
6 聚集索引没有建在表的顺序字段上,该表容易发生页分裂
在sqlserver 上
3、SQL Server 表连接的三种方式
(1) Merge Join
(2) Nested Loop Join
(3) Hash Join
SQL Server 2000只有一种join方式——Nested Loop Join,如果A结果集较小,那就默认作为外表,A中每条记录都要去B中扫描一遍,实际扫过的行数相当于A结果集行数x B结果集行数。所以如果两个结果集都很大,那Join的结果很糟糕。
SQL Server 2005新增了Merge Join,如果A表和B表的连接字段正好是聚集索引所在字段,那么表的顺序已经排好,只要两边拼上去就行了,这种join的开销相当于A表的结果集行数加上B表的结果集行数,一个是加,一个是乘,可见merge join 的效果要比Nested Loop Join好多了。
如果连接的字段上没有索引,那SQL2000的效率是相当低的,而SQL2005提供了Hash join,相当于临时给A,B表的结果集加上索引,因此SQL2005的效率比SQL2000有很大提高,我认为,这是一个重要的原因。
总结一下,在表连接时要注意以下几点:
(1) 连接字段尽量选择聚集索引所在的字段
(2) 仔细考虑where条件,尽量减小A、B表的结果集
(3) 如果很多join的连接字段都缺少索引,而你还在用SQL Server 2000,赶紧升级吧。
- 优化sql 语句的几种方式
- SQL循环语句的几种方式
- SQL SERVER 的SQL语句优化方式
- C#中产生SQL语句的几种方式
- C#中产生SQL语句的几种方式
- MySQL笔记-执行SQL语句的几种方式
- mybatis 构建SqlSessionFactory的几种方式 以及调用sql映射语句的几种方式
- 几种SQL语句优化方案
- sql 循环语句几种方式
- 【转载】sql 循环语句几种方式
- sql 循环语句几种方式
- 关于SQL语句的优化方式
- SQL SERVER 的SQL语句优化方式小结
- SQL SERVER 的SQL语句优化方式小结
- 优化SQL语句必须注意的几点
- if语句的几种优化
- mysql 复制表的几种方式以及常用的sql语句
- sql语句删除数据库表的几种方式及区别
- spring获取数组参数(二)
- Cocos-2d js 多个精灵都调用同一个动作 执行不成功(加“.copy()“)
- 第12周-Microwave面板图形界面基础
- Joda-Time 简介
- 关于mfc 对powerpoint的操作,控制ppt播放
- 优化sql 语句的几种方式
- 在eclipse下android ndk直接编译librtmp。
- springMVC实例(三)
- java接口概述
- 简单的视频 Videoview
- 短信发送状态报告(Status Report)的处理
- 浅谈Android中Activity的生命周期和加载模式
- STL: reverse_iterator / iterator 关系以及 erase 相关(C++)
- 一致性哈希算法(consistent hashing)