一则简单演示样例看Oracle的“无私”健壮性

Oracle的强大之处就在于他能总帮助让你选择正确的运行计划,即使你给了它错误的指示。

实验:

1. 创建測试表

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmlzYWw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

收集统计信息:

创建B树索引:

2. 运行select id from tbl_plan;查看它的运行计划

由于创建了B树索引,正常讲能够从索引中获得id的值,不用全表扫描,但这里使用了全表扫描的方式。

即使使用了HINT,这依然使用的是全表扫描:

原因在于这是个B树索引,不会存储NULL值,虽然这张表没有NULL值。

假设直接从可能包括NULL值的B树索引中查询记录。NULL值不会存储于索引。就会漏一些记录,那么查询结果就会有错,所以Oracle在此并没有选择使用索引扫描,而是进行的全表扫描

3. 将id字段设为非空

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmlzYWw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

相当于这是一个唯一性索引了。

再运行select id from tbl_plan;:

Oracle选择的是索引高速全扫描,由于id是索引字段,直接从索引中获得值是最高速的方式。

假设是使用了HINT的方式:

这使用的是索引全扫描,不如索引高速全扫描,但至少HINT起到了作用。原因就在于从非空索引中获得值是一种可靠的方式。因此Oracle同意HINT的使用

总结

从上面的简单演示样例能够看到。Oracle总会帮你选择正确的运行计划,即使你将错误的信息给了Oracle。Oracle这样的“无私”的精神值得我们学习。假设我们的应用系统也是这样足够健壮,那就更好了。

时间: 2024-12-29 06:59:51

一则简单演示样例看Oracle的“无私”健壮性的相关文章

一则简单示例看Oracle的“无私”健壮性

Oracle的强大之处就在于他能总帮助让你选择正确的执行计划,即使你给了它错误的指示. 实验: 1. 创建测试表: 收集统计信息: 创建B树索引: 2. 执行select id from tbl_plan;查看它的执行计划: 因为创建了B树索引,正常讲可以从索引中获得id的值,不用全表扫描,但这里使用了全表扫描的方式. 即使使用了HINT,这依旧使用的是全表扫描: 原因在于这是个B树索引,不会存储NULL值,尽管这张表没有NULL值.如果直接从可能包含NULL值的B树索引中查询记录,NULL值不

[hadoop系列]Pig的安装和简单演示样例

inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yahoo!捐献给Apache的一个项目,眼下还在Apache孵化器(incubator)阶段,眼下版本号是v0.5.0.Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-like语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运

JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例

什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MSC 替换了之前的 JMX Kernel 和 MicroContainer,它主要特定能够总结例如以下三点: 高并发容器(A highly concurrent state machine) 无多相位,设计简单(No multiple phases, much simpler) 不依赖 JMX 和 J

MongoDB + node-mongoskin简单演示样例

特点 无模式 MongoDB 中的每一条文档,都是一个 JSON 对象,因此你无需提前定义一个集合的结构,集合中的每一个文档也能够有不同的结构. 异步写入 MongoDB 默认全部的写操作都是『不安全』的,即当请求被 MongoDB 收到时,不等写入操作完毕,就返回一个『成功』的响应. 这是默认的行为,当然你也能够设置一些选项,让操作等待等待写入完毕后再返回响应.只是对于大多数应用,这样的『不安全』已经足够安全了. 简单查询 MongoDB 仅仅支持简单的查询,MongoDB 仅仅储存数据,很多

XLSTransformer生成excel文件简单演示样例

项目结构图: 项目中所用到的jar,能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码: package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.jxls.exception.ParsePropertyExcep

一个简单演示样例来演示用PHP訪问表单变量

首先编写表单页面orderform.html,用post方法请求服务端脚本文件:processorder.php orderform.html: <!DOCTYPE html> <html> <head lang="zh_CN"> <meta charset="UTF-8"> <title>订单页面</title> </head> <body> <h2>Jas

Libevent 学习笔记 (1)——Libevent 2.0安装与简单演示样例

今天開始学习Libevent . Libevent 是开源社区的一款高性能I/O框架库. 主要特点有: 1 跨平台. 2 统一事件源 3 线程安全 4 基于Reactor 今天主要进行了Libevent的安装,以及利用libevent框架编写一个间隔1s打印 Hello Libevent! 信息的程序. 首先是安装: 1 下载libevent源代码,下载地址http://libevent.org/.我下载的版本号是2.0 stable版本号.下载的文件格式是tar.gz包 2 进入刚下载得到的t

最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture)

===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频播放演示样例2:GDI播放YUV, RGB 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface) 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture) 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV 最简单的视音频播放演示样例

最简单的视音频播放演示样例7:SDL2播放RGB/YUV

===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频播放演示样例2:GDI播放YUV, RGB 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface) 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture) 最简单的视音频播放演示样例5:OpenGL播放RGB/YUV 最简单的视音频播放演示样例