0. 环境创建

SQL> create usertest identified by test

  2 default tablespace users

  3 temporary tablespace temp

  4 quota unlimited on users;

User created.

SQL> grant createsession, resource, alter session to test;

Grant succeeded.

SQL> conntest/test;

Connected.

SQL> create tableemp(id number, name varchar2(10));

Table created.

SQL> insert intoemp values(100, 'tom');

1 row created.

SQL> insert intoemp values(200, 'mike');

1 row created.

SQL> insert intoemp values(300, 'jack');

1 row created.

SQL> insert intoemp values(400, 'rose');

1 row created.

SQL> commit;

Commit complete.

1. 数据少时的情况

1.1 FIRST_ROWS_10

SQL> setautotrace traceonly;

SQL> executedbms_stats.gather_table_stats('TEST', 'emp', cascade=>true);

PL/SQL proceduresuccessfully completed.

SQL> altersession set optimizer_mode=first_rows_10;

Session altered.

1.2 ALL_ROWS

SQL> alter sessionset optimizer_mode=all_rows;

Session altered.

1.3 分析

通过上面的简单举例比较,我们可以看到,在表上没有索引,当数据量很少,并且值唯一的情况下,两种模式的表现是一样的

2. 数据少时的情况

SQL> create indexemp_idx on emp(name);

Index created.

SQL> setautotrace off

SQL> insert intoemp select * from emp;

4 rows created.

SQL> insert intoemp select * from emp;

8 rows created.

SQL> /

16 rows created.

SQL> /

32 rows created.

SQL> /

64 rows created.

SQL> /

128 rows created.

SQL> /

256 rows created.

SQL> /

512 rows created.

SQL> /

1024 rows created.

SQL> /

2048 rows created.

SQL> /

4096 rows created.

SQL> /

8192 rows created.

SQL> /

16384 rows created.

SQL> /

32768 rows created.

SQL> commit;

Commit complete.

SQL> executedbms_stats.gather_table_stats('TEST', 'emp', cascade=>true);

PL/SQL proceduresuccessfully completed.

2.1 FIRST_ROWS_10

SQL> setautotrace traceonly

SQL> altersession set optimizer_mode=first_rows_10;

Session altered.

2.2 ALL_ROWS

SQL> setautotrace traceonly

SQL> altersession set optimizer_mode=all_rows;

Session altered.

2.3 分析

我们看到fisrt_rows走了索引,这显然不是一种理想的结果,而all_rows走了全表扫描,我们可以看到成本明显更低。

Oracle执行计划——all_rows和first_rows(n) 优化器模式的更多相关文章

  1. Oracle数据库表索引失效,解决办法:修改Oracle数据库优化器模式

    ALTER SYSTEM SET OPTIMIZER_MODE=RULE scope=both; 其他可以选择的模式还有ALL_ROWS/CHOOSE/FIRST_ROWS/ALL_ROWS. 应用系 ...

  2. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  3. 【摘】Oracle执行计划不走索引的原因总结

    感谢原博主 http://soft.chinabyte.com/database/364/12471864.shtml 在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的 ...

  4. [转]看懂Oracle执行计划

    原文地址:https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径 ...

  5. 看懂Oracle执行计划、表连接方式

    看懂Oracle执行计划  原文:https://www.cnblogs.com/Dreamer-1/p/6076440.html 最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也 ...

  6. 使用Oracle执行计划分析SQL性能

    执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述.即就是对一个查询任务,做出一份怎样去完成任务的详细方案. 如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的 ...

  7. 02 看懂Oracle执行计划

    看懂Oracle执行计划   最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing… 一:什么是Oracle执行计划? 执行计划是一条查询语句在 ...

  8. oracle执行计划(转载)

    转载自 https://www.cnblogs.com/Dreamer-1/p/6076440.html 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的 ...

  9. Oracle执行计划不走索引的原因总结

    在Oracle数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要就介绍这部分内容,接下来就让我们一起来了解一下. 不走索引大体有以下几个原 ...

随机推荐

  1. Android内存泄漏的各种原因详解

    转自:http://mobile.51cto.com/abased-406286.htm 1.资源对象没关闭造成的内存泄漏 描述: 资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我 ...

  2. MySQL存储过程详解 mysql 存储过程(二)

    mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...

  3. SSIS学习计划

    百科:SSIS是Microsoft SQL Server Integration Services的简称,是生成高性能数据集成解决方案(包括数据仓库的提取.转换和加载 (ETL) 包)的平台. htt ...

  4. Android项目代码混淆

    http://coolshell.info/blog/2015/03/Android-studio-prefrence.html 什么是Gradle Gradle是一种依赖管理工具,基于Groovy语 ...

  5. Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view...

    Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tabl ...

  6. Swift - 30 - 可变参数

    //: Playground - noun: a place where people can play import UIKit // 可变参数一定要放在所有定义参数的最后面, 和其他参数的定义方式 ...

  7. zookeeper集群一次性启动

    编写shell脚本 新建文本,命名为start-zookeeper.sh #!/bin/sh echo "start zkServer…" for i in master work ...

  8. 【windows开发实现记事本程序——界面篇】

    前言 从毕业开始学习windows UI编程,工作中总是和一些API打交道,但是从没有做过一个完整的界面程序.因此打算自己利用空余时间做一个小的项目来总结自己所学的东西.在网上看到许多人建议自己动手写 ...

  9. JVM内存管理及垃圾回收

    一.JVM内存的构 Java虚拟机会将内存分为几个不同的管理区,这些区域各自有各自的用途,根据不同的特点,承担不同的任务以及在垃圾回收时运用不同的算法.总体分为下面几个部分: 程序计数器(Progra ...

  10. [标签] action的使用

    1.描述 This tag enables developers to call actions directly from a JSP page by specifying the action n ...