避免无计划的全表扫描<!--?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /-->
如下情况进行全表扫描:
- 该表无索引
- 对返回的行无人和限制条件(无Where子句)
- 对于索引主列(索引的第一列)无限制条件
- 对索引主列的条件含在表达式中
- 对索引主列的限制条件是is (not) null或!=
- 对索引主列的限制条件是like操作且值是一个bind variable或%打头的值
只使用选择性索引
索引的选择性是指索引列中不同值得数目和标志中记录数的比,选择性最好的是非空列的唯一索引为1.。
复合索引中列的次序的问题:
在限定条件里最频繁使用的列应该是主列
最具有选择性的列(即最清晰的列)应该是主列
如果1和2 不一致,可以考虑建立多个索引。
在复合索引和多个单个索引中作选择:
考虑选择性考虑读取索引的次数 考虑AND-EQUAL操作 管理多表连接(Nested Loops, Merge Joins和Hash Joins) 优化联接操作
Merge Joins是集合操作 Nested Loops和Hash Joins是记录操作返回第一批记录迅速
Merge Joins的操作适用于批处理操作,巨大表和远程查询
1全表扫描 --〉 2排序 --〉3比较和合并 性能开销主要在前两步
适用全表扫描的情形,都适用Merge Joins操作(比Nested Loops有效)。
改善1的效率:优化I/O,提高使用ORACLE多块读的能力,使用并行查询的选项
改善1的效率:提高Sort_Area_Size的值,使用Sort Direct Writes,为临时段提供专用表空间
管理包含视图的SQL语句
优化器执行包含视图的SQL语句有两种方法:
- 先执行视图,完成全部的结果集,然后用其余的查询条件作过滤器执行查询
- 将视图文本集成到查询里去
含有group by子句的视图不能被集成到一个大的查询中去。
在视图中使用union,不阻止视图的SQL集成到查询的语法中去。
优化子查询
使用复合Keys/Star查询
恰当地索引Connect By操作
限制对远程表的访问
管理非常巨大的表的访问
- 管理数据接近(proximity) 记录在表中的存放按对表的范围扫描中最长使用的列排序按次序存储数据有助于范围扫描,尤其是对大表。
- 避免没有帮助的索引扫描当返回的数据集合较大时,使用索引对SGA的数据块缓存占用较大,影响其他用户;全表扫描还能从ORACLE的多块读取机制和“一致性获取/每块”特性中受益。
- 创建充分索引的表 使访问索引能够读取较全面的数据 建立仅主列不同的多个索引
- 创建hash簇
- 创建分割表和视图
- 使用并行选项
使用Union All 而不是Union
UNION ALL操作不包括Sort Unique操作,第一行检索的响应速度快,多数情况下不用临时段完成操作,
UNION ALL建立的视图用在查询里可以集成到查询的语法中去,提高效率
避免在SQL里使用PL/SQL功能调用
绑定变量(Bind Variable)的使用管理
使用Bind Variable和Execute using方式
将like :name ||’%’ 改写成 between :name and :name || char(), 已避免进行全表扫描,而是使用索引。
回访优化进程
数据变化后,重新考察优化情况

13个SQL优化技巧的更多相关文章

  1. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  2. 常用的7个SQl优化技巧

    作为程序员经常和数据库打交道的时候还是非常频繁的,掌握住一些Sql的优化技巧还是非常有必要的.下面列出一些常用的SQl优化技巧,感兴趣的朋友可以了解一下. 1.注意通配符中Like的使用 以下写法会造 ...

  3. 19 个让 MySQL 效率提高 3 倍的 SQL 优化技巧

    优化成本: 硬件>系统配置>数据库表结构>SQL及索引 优化效果: 硬件<系统配置<数据库表结构<SQL及索引 本文我们就来谈谈 MySQL 中常用的 SQL 优化 ...

  4. 数据库的规范和SQL优化技巧总结

    现总结工作与学习中关于数据库的规范设计与优化技巧 1.规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需 ...

  5. 数据库查询优化-20条必备sql优化技巧

    0.序言 本文我们来谈谈项目中常用的 20 条 MySQL 优化方法,效率至少提高 3倍! 具体如下: 1.使⽤ EXPLAIN 分析 SQL 语句是否合理 使⽤ EXPLAIN 判断 SQL 语句是 ...

  6. SQL优化技巧--远程连接对象引起的CTE性能问题

    背景 最近SSIS的开发过程中遇到几个问题.其中使用CTE时,遇到一个远程连接对象,结果导致严重的性能问题,为了应急我就修改了代码. 之前我写了一篇介绍CTE的随笔包含了CTE的用法等: http:/ ...

  7. Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"

    最近正在拜读Hibernate之父大作<Java Persistence with Hibernate>,颇有收获.在我们熟悉的Hibernate映射文件中也大有乾坤,很多值得我注意的地方 ...

  8. MySql Sql 优化技巧分享

    有天发现一个带inner join的sql 执行速度虽然不是很慢(0.1-0.2),但是没有达到理想速度.两个表关联,且关联的字段都是主键,查询的字段是唯一索引. sql如下: SELECT p_it ...

  9. 一个MySql Sql 优化技巧分享

    有天发现一个带inner join的sql 执行速度虽然不是很慢(0.1-0.2),但是没有达到理想速度.两个表关联,且关联的字段都是主键,查询的字段是唯一索引. sql如下: SELECT p_it ...

随机推荐

  1. mysql主从复制 主从配置(windows系统上)

    OS:Windows7 DB:MYSQL5.6.2 1.正常安装第一个mysql(安装步骤省略)  2.在控制面板里停止第一个mysql服务  3.将C:\Program Files\MySQL目录下 ...

  2. ImageView的Scaletype

    ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等. 设置的方式包括: 1. 在layout xml中定义android:s ...

  3. IOS 读取本地的Json/plist 文件

    一.一般本地可以存储轻量级数据存储 plist  这个主要是操作字典 方法如下: NSString * sampleFile= [[[NSBundle mainBundle] bundlePath] ...

  4. sql over开窗函数

    1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单表(order)中统计中,生 ...

  5. Unity封装dll教程整理

    ///作者Unity3d师兄---LeroyYang 通过网上大神们的资料以及自己的整理,学习一下用vs2013简单的封装dll文件,方便接口模式下开发,使得逻辑层更为清晰. 操作步骤 1.打开vs2 ...

  6. PHP实现无级递归分类(ThinkPHP框架)

    /** * 无级递归分类 * @param int $assortPid 要查询分类的父级id * @param mixed $tag 上下级分类之间的分隔符 * @return string $tr ...

  7. page74-泛型可迭代的基础集合数据类型的API-Bag+Queue+Stack

    [泛型可迭代的基础集合数据类型的API] 背包:就是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素.(用例也可以检查背包是否为空, 或者获取背包中元素的 ...

  8. (ASP.NET)总结MVC中@Html表单用法

    1.当type类型是text时:@Html.TextBoxFor(model => Model.Name,new{@style = "width: 50px;", @clas ...

  9. Part 94 Difference between Monitor and lock in C#

  10. MySQL之连接数据库的两种方法

    方法一: package DB; import java.sql.Connection; import java.sql.DriverManager; public class Conn { // 定 ...