听了猫大师的课,对Oracle CBO又加深了一步理解: 单表选择率: selectivity=1/ndv*a4nulls ocard来自dba_tables.num_rows ndv 来自dba_tab_col_statistics中的num_distinct where 条件为 owner='' AND table_name='' and column_name='' a4nulls 来自dba_tab_col_statistics中的num_nulls where  条件为 owner='…
CBO优化器是基于对当前经过特定测试的数据集中预期的行比率估计来计算基数的.此处的行数之比是一个数值,称为选择率(selectivity).得到选择率之后,将其与输入行数进行简单相乘既可得到基数. 在理解选择性之前,必须得对user_tab_col_statistics视图有一定了解: SQL> desc user_tab_col_statistics 名称                                      是否为空? 类型 -----------------------…
Oracle单表的简单查询 查看表结构 desc emp; 查询所有列 Select * from emp; 查找所以部门编号(查指定的列) select deptnofrom emp; 查找编号不同的部门编号(去重) selectdistinct deptnofrom emp; 查找ename为SMITH的员工职位,工资,部门编号 select job,sal,deptnofrom emp t  where t.ename='SMITH'; 查找员工的年薪 NVL( string1, repl…
Oracle单表的复杂查询 select avg(sal),max(sal),deptnofrom empgroupby deptno; orderby deptno; 查询工资高于500或者是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J? or job='manager')and enamelike'J%'; 按照部门号升序而雇员的工资降序排列 select *from emporderby deptnoasc , saldesc ; assum,enamefrom em…
Oracle单表去重 去重有两层含义,一:是记录完全一样.二:是符合一定条件的认为是重复. 根据表的数量,去重可划分为:单表去重和多表关联去重.   对于去重,一般最容易想到的是用distinct,而distinct只能对记录完全重复的记录保留一条. distinct使用的是二重循环的方式来去重的,如果数据量非常大的时候,会导致性能急剧下降. 我们前一篇文章已经给出了详解,你可以去查看 Oracle单表去重复(一)    下面是一个单表去重的测试,认为name字段相同的即为重复记录,要查询出一个…
有时开发进行表结构设计,对表字段是否为空过于随意,出现诸如id1=id2,如果允许字段为空,因为Oracle中空值并不等于空值,有可能得到意料之外的结果.除此之外,最关键的是,NULL会影响oracle的执行计划. 以下为NULL影响执行计划的测试示例. /*1.构建test表,其中create table方式建立的test表结构object_id非空*,走索引/ SELECT Count(*) FROM all_objects WHERE object_id IS NOT NULL; --41…
去重有两层含义,一:是记录完全一样:二:是符合一定条件的认为是重复. 根据表的数量,去重可划分为:单表去重和多表关联去重.   对于去重,一般最容易想到的是用distinct,而distinct只能对记录完全重复的记录保留一条. distinct使用的是二重循环的方式来去重的,如果数据量非常大的时候,会导致性能急剧下降. 例如:select distinct 字段名 from 原表; 此应用案例,主要有删除表中的完全重复的记录: insert into 临时表 select distinct 字…
1.在pl/sql中打开cmd命令容器 2.在cmd命令窗口中输入:explain plan for select * from t; 3.查看sql语句的执行计划:select * from table(dbms_xplan.display); MISSES IN library cache during parse:1 翻译:发生在解析的硬解析数量为1,表示硬解析 MISSES IN library cache during parse:0 翻译:发生在解析的硬解析数量为0,表示没有硬解析,…
-- 单表查询 -- 查询表的所有数据, *代表所有 -- select * from [表名]; -- 查询表中指定字段的值 -- select [字段1], [字段2] ... from [表名]; -- 给查询结果中的字段使用别名 -- 在字段后面使用关键字 as ( 字段名 as "别名" ), -- as关键字可以省略不写, 别名中没有特殊符号的话, 双引号也可以不写 -- select [字段1] [空格] [别名], [字段2] as [别名] ... from [表名]…
备份方案一: 1. 备份 create table [备份名] as select * from [表名]; 2. 恢复 truncate table org_group; insert into org_group select * from [备份名] ; 3. 说明 此种情况适用于,同一个数据库,需要备份某张表. 备份方案二: 1. 备份 oracle用户终端执行: exp [用户名]/[密码] tables=[表一],[表二] file=/home/oracle/table.dmp 2.…