首页
学习
活动
专区
圈层
工具
发布

oracle 查询转换初探

Oracle‍‍查询转换初探 作者‍:邱大龙‍‍ 概述 Oracle查询转换器的作用是把原始sql重写为语义相同的语句,目的是为了获得更高效的sql。...查询转换主要有四种技术:子查询展开,视图合并,谓词推入,星型转换。 了解查询转换是掌握SQL优化的基础,本文将对这四种技术做一些简单的介绍。...子查询展开 子查询展开是指优化器不再把子查询作为独立的单元处理,而是转换成等价的join方式。...星型转换 星型转换为提高星型查询的效率发生,在原有条件基础上会产生新的子查询对事实表做过滤,然后通过对事实表相应连接列的位图索引做位图操作,达到过滤事实表结果集的目的。...是否开启星型转换受参数star_transformation_enabled控制,可以设置为: true:优化器将考虑基于成本的星型查询转换; false:禁止星型转换; temp_disable:优化器将考虑基于成本的星型查询转换

1.8K50

Oracle里的查询转换

Oracle里的查询转换,有称为查询改写,指oracle在执行目标sql时可能会做等价改写,目的是为了更高效的执行目标sql在10g及其以后的版本中,oracle会对某些类型的查询转换(比如子查询展开、...复杂视图合并等)计算成本,oracle会分别计算查询转换后的等价改写的sql的成本和原始sql的成本,如果改写后的sql的成本低于原始sql的成本,oracle才会对目标sql执行查询转换。...指优化器不在将子查询当做一个独立的单元来处理,而是将该子查询转为它自身和外部查询之间的等价的表连接,将子查询拆开, 将子查询中的表、视图从子查询中拿出来,然后后外部查询的表、视图做连接,或者会把该子查询转换为一个内嵌视图...2 对���不拆开的子查询会把它转换为一个内嵌视图的子查询展开。 对于第一种情况,Oracle 10g及以后的版本中,Oracle也不会考虑子查询展开的成本。...将目标sql等级的改写成按分区union all的形式,不可用index union all可用index 11g r2引入 对同一个目标sql而言,oracle可能会采用不止一种的查询转换手段 7

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    oracle、mysql 分页查询比较

    这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。...对于第一个查询语句,第二层的查询条件WHERE ROWNUM Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。...而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。...* FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 2、 MySQL的分页查询语句 在PhpMyAdmin里执行如下SQL: SELECT...1000000 , 1(2.1303 秒) SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1(0.5532 秒) 可以发现,转换成静态表之后

    3.2K80

    oracle、mysql 分页查询比较

    这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。...对于第一个查询语句,第二层的查询条件WHERE ROWNUM Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。...而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。...* FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHERE RN >= 21 2、 MySQL的分页查询语句 在PhpMyAdmin里执行如下SQL: SELECT...1000000 , 1(2.1303 秒) SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1(0.5532 秒) 可以发现,转换成静态表之后

    3.3K90

    数据类型转换

    Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。 自动转换 一个int 类型变量和一个byte 类型变量进行加法运算, 结果会是什么数据类型?...//int类型和byte类型运算,结果是int类型 int k = i + j; System.out.println(k); } 运算结果,变量的类型将是int 类型,这就是出现了数据类型的自动类型转换现象...想要赋值成功,只有通过强制类型转换,将double 类型强制转换成int 类型才能赋值。 强制类型转换:将取值范围大的类型强制转换成取值范围小的类型。...转换格式: 数据类型 变量名 = (数据类型)被转数据值; 将1.5 赋值到int 类型,代码修改为: // double类型数据强制转成int类型,直接去掉小数点。...小贴士: 在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。

    88120

    转换数据类型

    一、转换数据类型的作用 问:input()接收用户输入的数据都是字符串类型,如果用户输入1,想得到整型该如何操作? 答:转换数据类型即可,即将字符串类型转换成整型。...二、转换数据类型的函数 函数 说明 int(x [,base ]) 将x转换为一个整数 float(x) 将x转换为一个浮点数 complex(real [,imag ]) 创建一个复数,real为实部...检测接收到的用户输入的数据类型 -- str类型 print(type(num)) # 4....转换数据类型为整型 -- int类型 print(type(int(num))) 四、实验 # 1. float() -- 将数据转换成浮点型 num1 = 1 str1 = '10' print(type...type(eval(str2))) print(type(eval(str3))) print(type(eval(str4))) print(type(eval(str5))) 五、总结 转换数据类型常用的函数

    48330
    领券