oracle select执行顺序的详解


SQL Select语句完整的执行顺序:
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。

oracle 语句提高查询效率的方法
1:.. where column in(select * from ... where ...);
2:... where exists (select 'X' from ...where ...);
第二种格式要远比第一种格式的效率高。在Oracle中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询
使用EXISTS,Oracle系统会首先检查主查询,然后运行子查询直到它找到第一个匹配项,这就节省了时间
Oracle系统在执行IN子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中

选择最有效率的表名顺序(只在基于规则的优化器中有效)
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。
如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。

WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。



相关阅读:
无需 Flash 使用 jQuery 复制文字到剪贴板
Win10系统如何启用文件夹导航窗格就是原来的树形结构目录
JavaScript Window浏览器对象模型方法与属性汇总
nodejs获取本机内网和外网ip地址的实现代码
PHP中让curl支持sock5的代码实例
AngularJS 过滤器的简单实例
Android网络请求库android-async-http介绍
ajax智能提示+textbox动态生成下拉框示例代码
win10黑屏就断网该怎么办?win10设置待机不断网的详细教程
浅析AJAX乱码及错误解决方案
基于C#实现网页爬虫
jsp页面中插入css样式的三种方法总结
Laravel 5框架学习之子视图和表单复用
window update配置失败怎么还原更改?
快速导航

Copyright © 2016 phpStudy |