一则简单示例看Oracle的“无私”健壮性
来源:互联网 发布:冯卡门知乎 编辑:程序博客网 时间:2024/05/08 12:10
Oracle的强大之处就在于他能总帮助让你选择正确的执行计划,即使你给了它错误的指示。
实验:
1. 创建测试表:
收集统计信息:
创建B树索引:
2. 执行select id from tbl_plan;查看它的执行计划:
因为创建了B树索引,正常讲可以从索引中获得id的值,不用全表扫描,但这里使用了全表扫描的方式。
即使使用了HINT,这依旧使用的是全表扫描:
原因在于这是个B树索引,不会存储NULL值,尽管这张表没有NULL值。如果直接从可能包含NULL值的B树索引中查询记录,NULL值不会存储于索引,就会漏一些记录,那么查询结果就会有错,所以Oracle在此并没有选择使用索引扫描,而是进行的全表扫描。
3. 将id字段设为非空:
相当于这是一个唯一性索引了。
再执行select id from tbl_plan;:
Oracle选择的是索引快速全扫描,因为id是索引字段,直接从索引中获得值是最快速的方式。
如果是使用了HINT的方式:
这使用的是索引全扫描,不如索引快速全扫描,但至少HINT起到了作用,原因就在于从非空索引中获得值是一种可靠的方式,因此Oracle允许HINT的使用。
总结:
从上面的简单示例可以看到,Oracle总会帮你选择正确的执行计划,即使你将错误的信息给了Oracle,Oracle这种“无私”的精神值得我们学习,如果我们的应用系统也是这样足够健壮,那就更好了。
0 0
- 一则简单示例看Oracle的“无私”健壮性
- 从文本框输入看软件的健壮性
- Oracle SQL 正则表达式示例一则
- oracle触发器(trigger)应用示例一则
- 简单通用的一则makefile
- 无私的基因
- 无私
- 一个简单的测试程序健壮性的c程序
- Java连接Oracle的简单示例
- Java连接Oracle数据库的简单示例
- 一则简单的磁盘的iops测试
- 一则分页查询的简单优化
- 笑看一则招聘广告
- Oracle简单示例讲解
- Oracle简单示例讲解
- oracle: job简单示例
- Oracle行转列 简单示例
- Oracle触发器简单示例
- 梯度下降算法-R语言
- java面试之ClassLoader类加载器
- LibSVM中select_working_set函数
- STM8S延时函数
- 第240天(23W+5)
- 一则简单示例看Oracle的“无私”健壮性
- 在一个字符串中找到第一个只出现三次的字符(如accbcabbbdddbb中第一个只出现三次的字符是c)
- JAVA面向对象——继承
- Codeforces Round #275 (Div. 2) —— C
- Leetcode: Convert Sorted List to Binary Search Tree
- 关于LibSVM的SMO问题
- UIWebView之获取所点位置图片URL
- [leetcode]Valid Sudoku
- JAVA应用闪退,堆栈日志中出现EXCEPTION_STACK_OVERFLOW