—-1.数据库的三范式?
一律范式: 每个列都是不可分割的原子单元;
二范式: 必须满足第一范式;每个列都依赖让主键。
老三范式:必须满足第二范式;每个列不克传递依赖让主键。

2014-12-18 Created By
BaoXinjian

 

统计 1一、摘要

—-2.主键的规划条件有哪?
相同、唯一的标识一行;
仲、作为一个好于外键有效引用的对象;
老三、不欲更新主键;
季、主键不应该包含动态变化的数量,如时间戳 等;
五、主键应当有计算机自动生成。


 

Statistic 对Oracle 是甚主要之。

—-3.数目的束缚有哪特色(主键约束,唯一约束, 非空约束, null约束,
默认值约束, check[枚举]约, 外键约束, 长度约束)

她会收集数据库被目标的详细信息,并储存在对应的数据字典里。
根据这些统计信息, optimizer 可以本着每个SQL 去摘最为好的尽计划。

无异于、主键约束:表中定义一个主键来唯一确定表中各一行数的标识符;(非空,唯一)
第二、唯一约束:保证在一个字段或者千篇一律组字段里之数及表中其它行的数目比是绝无仅有的;
老三、非空约束:强制列不受 NULL 值;
季、null约束:只用于定义列约束,没有其它约束时默认是null约束;
五、默认值约束:用于向列着插入默认值,如果没规定任何的价,那么会拿默认值添加至独具的新记录;
六、check[枚举]格:用于限制列被的价值的限定;
七、外键约束:用于防止破坏表之间接连的动作;
八、长度约:

Statistic 对Oracle
是异常关键之,它见面采集数据库被目标的详细信息,并蕴藏于对应的数目字典里。

—-4.主键约束与唯一约束有安区别?

据悉这些统计信息, optimizer
可以针对每个SQL 去选择最好好之实践计划。

1.当一个表中,只能定义一个primary key约束,但但定义多独unique约束;
2.对于指定为primary
key的一个排或多独列的构成,其中任何一个排列都未能够出现空值,而对于unique所约束的唯一键,
尽管如此允许为null,只是null值最多发生一个。

Oracle Statistic 的征集,可以以analyze
命令,也足以以DBMS_STATS 包来搜集。

 

Oracle
建议采用DBMS_STATS包来集统计信息,因为DBMS_STATS包收集之又广阔,并且更精确,Analyze
以此后的版中可能会见为移除。

—-5.内连接和他接连的界别

 

内链接:也为自然连接,多表作为联查,满足条件的数量才能够呈现;
外链接:分为左外连接,右外连接,全外连接,全外连接而起on条件,在必然水平达到一致于外连接,如果没有on条件表示笛卡尔积。

统计 2仲、统计信息内容和层次

—-6.左外接连,右外连接和全外连接的别


左外连接:以左表为标准,查询满足条件的排,右表没有匹配到的数额以null代替;
右外连接:以右表为极,查询满足条件的排列,左表没有匹配到之数据以null代替;
全外连接:如果产生on条件,在必程度上同一于外对接,如果没on条件表示笛卡尔积

  1. Table statistics

—-7.君下过什么样mysql函数.

(1). 行数,块数,行平均长

字符串函数: concat连接,lpad左填充,rpad右填充
,ltrim删除左边空格,rtrim删除右边空格,replace替换,length返回字符长度
substring截取;
数字函数:ceil向达取整,floor向下取整,abs绝对值,mod取余,rand产生0~1的妄动数,round四放弃五相符,可设置保留位数,
truncate可安装保留小数,但无会见四放弃五切
日子函数:now返回年月日经常转,curdate返回年月日,curtime返回时转,week返回时日子是当前年底第几到,
year返回当前日期的夏,date_format可安装时间格式,date_add可将日期为前头推动或向后推
流程函数:if(n,t,f)n为true时执行t,否则执行f
,ifnull(n,t,f)n为空时执行t,否则执行f。

(2).
DBA_TBALES:NUM_ROWS,BLOCKS,AVG_ROW_LEN;

—-8.视图是啊? 视图的助益有什么样?
视图:是冲一个发明要多单说明或视图的逻辑表,本身不含数据,通过其好对表里面的数据开展询问以及改
视图的优点:
1.对准数据库表的拜会,因为视图可以生选择性的选项数据库里之平局部。
2.用户通过简单的查询好从犬牙交错查询中获得结果, 从而隐藏数据复杂性 。
3.保安数据的独立性,视图可由多独说明检索数据。
4.对于同之多少可产生不同的视图, 以不同的角度来展示基表中之数据.
5.视图中得以动用连接(join),用几近个表中相关的列构成一个新的数额集。此视图就对准用户隐藏了多少来多独说明底实。
6.透过视图可以设定允许用户访问的排和数量实行,从而为表提供了附加的安全控制。

  • Number of rows
  • Number of blocks
  • Average row length

  • Column statistics

—-9.常用之oracle的函数有怎样?

(1).
列中绝无仅有值的数量(NDV),NULL值的数,数据分布;

字符函数:initcap首配母大写,
lower字母全部换成多少写,
upper字母全部易成那个写,
replace替换,
substr截取字符串,
concat连接字符串,
lpad 和 和 rpad 左填充字符和右填充字符,
length返回字符串的长;

(2).
DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM;

日期时函数:add_months 增加或减去月份,
months_between计算指定的一定量只日子中月数之差,
last_day 返回日期的末段一天,
round 和 和 trunc按照指定的精度进行四放弃五副,
next_day 给起日期 date 和星期几计下一个礼拜的日子,
数字函数:abs绝对值,
round四放弃五称,
trunc指定截尾取整的数字与截取精度的数字
mod取余
ceil向达取整
floor向下取整
Power(x,y) 返回 x 的 的 y
Mod (x ,y )返回 x 除 除 y 的余数
换函数:to_char转换成字符类型
to_date转换成时项目
to_number转换成数字型
混函数:nvl(string1, replace_with)如果 string1 为 null,则 nvl
函数返回 replace_with
的价,否则回 string1 的值
nvl2(e1, e2, e3) 如果 e1 也 null,则函数返回 e3,否则回 e2。
nullif(exp1,expr2)如果 exp1 和 exp2 齐则回空(null),否则回第一独价值

  • Number of distinct values (NDV) in
    column
  • Number of nulls in column
  • Data distribution (histogram)

  • Index statistics

分组函数:AVG (columname) 返回指定列的平均值
MAX (columname) 返回指定列的极端大值
MIN (columname) 返回指定列的极度小值
SUM (columname) 返回指定列的总值
COUNT
COUNT (*) 统计有执行个数,包括再复行和空值得行
COUNT (columname) 统计指定列非空值的独行数
COUNT (DISTINCR columname) 统计指定列着 非重复,非空值得行个数

(1). 叶块数量,等级,聚簇因子;

—-10.存储函数和仓储过程的区别?
1.囤函数有还只有来一个回值,而存储过程或者出返值。
2.储存函数只能发出输入函数 而存储过程可生多独 in,out,inout 参数。
3.囤积过程中之口舌功能还有力,存储过程可兑现好复杂的政工逻辑,而函数有多限制,如未可知以函数中利用
insert,update,delete,create 等话;存储函数只就查询的
工作,可领输入参数并返回一个结果,也便是函数实现的效益对比较大。
4.仓储过程得调用存储函数。但函数不可知调用存储过程。
5.囤积过程相似是作一个独门的局部来实施(call
调用)。而函数可以当作查询语句之一个有些来调用。

(2).
DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL;

—-11.囤积过程的缺点 和 优点?
优点:
1.存储过程只是于创立时进行编译,以后每次执行存储过程都未待更还编译,可提高数据库执行进度。
2.当对数据库进行复杂操作时,可将这个复杂操作用存储过程封装起来与数据库提供的事务处理结合并行使。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有少数用户才有对点名存储过程的使用权
5.
通过囤过程可以假设相关的动作在一道发,从而得以维护数据库的完整性和安全性。

  • Number of leaf blocks
  • Levels
  • Clustering factor

  • System statistics

  1. 足落网络的通信量。
  2. 倘体现企业规则之运算程序放入数据库服务器被,以便集中控制;

(1).
存储在aux_stats$中,需要以dbms_stats收集,I/O统计在X$KCFIO中;

缺点:
1.调剂麻烦;
2.移植问题,数据库端代码当然是同数据库相关的;
3.再度编译问题,因为后端代码是运作前编译的,如果带有引用关系之目标来变动时,
为影响之储存过程、包拿索要重新编译(不过也可装成运行时刻自动编译);
4.假设以一个次系统中大量的采用存储过程,到程序提交使用的时节随着用户需要的增多
加会导致数据结构的变。

  • I/O performance and
    utilization
  • CPU performance and
    utilization

—-12.jdbc中什么调用存储过程?
1.class.forname加载数据库让;
2.创建connection连接;
3.经过connection对象创建callableStatement对象;
4.安传入的参数和报传出参数;
5.实行sql语句,获取传出参数;
6.获释资源,关闭结果集,callableStatement对象、connection对象。

 

—-13.jdbc的施行步骤
1.class.forname加载数据库让;
2.创建connection连接;
3.通过connection对象创建Statement对象;
4.经Statement对象实行sql语句完成增删查改操作;
5.如果是询问,返回一个结果集对象,循环迭代结果集。

统计 3其三、统计信息语法

—-14.触发器是什么? 触发器的档次有怎样?
数据库触发器:是一个跟申相关联的、存储的 PL/SQL
程序。每当一个特定的多少操作语句子(Insert,update,delete)在指定的表上发出时,
Oracle 自动地履行触发器中定义之报句序列。


语句级触发器
于指定的操作语句操作前要之后执行同一坏,不管这漫长告句影响了多少行。
行级触发器(FOR EACH ROW)
触发语句作用的各一样长条记下都被硌。在行级触发器中行使 old 和 new
伪记录变量,识别值的状态。

  1. analyze

—–15.游标的意向?

亟需使用ANALYZE统计的统计:使用LIST
CHAINED ROWS和VALIDATE子句收集空闲列表块的统计;

  1. 点名结果集中一定行之位置。
  2. 根据当前之结果集位置检索一行要连续的几乎实施。
  3. 在结果集的脚下位置修改行遭之数。
  4. 针对其他用户所开的数目变动定义不同之敏感性级别。
  5. 可以因编程的法门访数据库。

analyze 不符合做分区表的剖析

—-16.mysql的端口? oracle的端口?
mysql的端口:3306;
oracle的端口:1521;

  • analyze table tablename compute
    statistics;
  • analyze index|cluster indexname
    estimate statistics;
  • analyze table tablename compute
    statistics for table /for all [local] indexes / for all
    [indexed] columns
  • analyze table tablename delete
    statistics
  • analyze table tablename validate ref
    update
  • analyze table tablename validate
    structure [cascade]|[into tablename]
  • analyze table tablename list chained
    rows [into tablename]

  • dbms_stats

—-17.mysql的分页? oracle的分页?

dbms_stats能好好地估计统计数据(尤其是对准于生之分区表),并会博取重新好之统计结果,最终制定有速度再快的SQL执行计划。

limit分页:Select * from table_name limit
n,m;//n为开端行数,m为要截取的行数;
rownum分页:select a.* ,rownum rn from (select * from table_name
rownum<=n) a where rn>m;

此保险的下边四单存储过程分别收载index、table、schema、database的统计信息:

—-18.简单说生数据库的事体;
工作是保持数据的一致性,它由有关的 DDL 或者 DML
语句做吧载体,这组语句执行之
结果或者一起成功,要么一起失败;
数据库事务的季个特色(ACID):原子性,一致性,隔离性,持久性。

  • dbms_stats.gather_table_stats    
    收集表、列和目录的统计信息;
  • dbms_stats.gather_schema_stats   
    收集SCHEMA下所有目标的统计信息;
  • dbms_stats.gather_index_stats    
    收集索引的统计信息;
  • dbms_stats.gather_system_stats   
    收集系统统计信息
  • dbms_stats.gather_dictioinary_stats   所有字典对象的统计;
  • dbms_stats.delete_table_stats    
    删除表的统计信息
  • dbms_stats.delete_index_stats    
    删除索引的统计信息
  • dbms_stats.export_table_stats    
    输出表的统计信息
  • dbms_stats.create_state_table
  • dbms_stats.set_table_stats    
    设置表的统计
  • dbms_stats.auto_sample_size

—-19.oracle的索引.
目是关系数据库中用于存放每一样漫长记下之同栽对象,主要目的是加快数据
的读取速度与完整性检查。

 

统计 4季、统计信息语法


4.1 统计信息收集如下数据:

(1)表自身之辨析:
包括表中的行数,数据块数,行长等消息。

(2)列的分析:包括列值的重复数,列上之空值,数据在排上的布情况。

(3)索引的分析:
包括索引叶块的数,索引的纵深,索引的成团因子等。

4.2
这些统计信息寄存于多少字典里,如:

(1).  DBA_TABLES

(2).  DBA_OBJECT_TABLES

(3).  DBA_TAB_STATISTICS

(4).  DBA_TAB_COL_STATISTICS

(5).  DBA_TAB_HISTOGRAMS

(6).  DBA_INDEXES

(7).  DBA_IND_STATISTICS

(8).  DBA_CLUSTERS

(9).  DBA_TAB_PARTITIONS

(10). DBA_TAB_SUBPARTITIONS

(11). DBA_IND_PARTITIONS

(12). DBA_IND_SUBPARTITIONS

(13). DBA_PART_COL_STATISTICS

(14). DBA_PART_HISTOGRAMS

(15).
DBA_SUBPART_COL_STATISTICS

(16). DBA_SUBPART_HISTOGRAMS

4.3 表的统计信息:

涵盖表行数,使用的块数,空的丘数,块的使用率,行迁移和链接的数目,pctfree,pctused的数码,行之平均大小:

SELECT NUM_ROWS, --表中的记录数
        BLOCKS, --表中数据所占的数据块数
        EMPTY_BLOCKS, --表中的空块数
        AVG_SPACE, --数据块中平均的使用空间
        CHAIN_CNT, --表中行连接和行迁移的数量
        AVG_ROW_LEN --每条记录的平均长度
FROM USER_TABLES 

4.4 索引列的统计信息   

寓索引的深(B-Tree的级别),索引叶级的丘数量,集群因子(clustering_factor),
唯一值的个数。

SELECT BLEVEL, --索引的层数
    LEAF_BLOCKS, --叶子结点的个数
    DISTINCT_KEYS, --唯一值的个数
    AVG_LEAF_BLOCKS_PER_KEY, --每个KEY的平均叶块个数
    AVG_DATA_BLOCKS_PER_KEY, --每个KEY的平均数据块个数
    CLUSTERING_FACTOR --群集因子
FROM USER_INDEXES

4.5 列的统计信息  

包含
唯一的价个数,列最酷小值,密度(选择率),数据分布(直方图信息),NUll值个数

SELECT NUM_DISTINCT, --唯一值的个数
    LOW_VALUE, --列上的最小值
    HIGH_VALUE, --列上的最大值
    DENSITY, --选择率因子(密度)
    NUM_NULLS, --空值的个数
    NUM_BUCKETS, --直方图的BUCKET个数
    HISTOGRAM --直方图的类型
FROM USER_TAB_COLUMNS

 

统计 5五、案例


案例: 查询表时,解析计划回去结果集Rows完全不正确,表经过大气之DML后,未开展剖析导致统计信息过久

Step1. 树测试SQL

统计 6

Step2. 查看结果集的Cardinality

统计 7

Step3.
查看表的统计计划,最后分析时过久

统计 8

Step4. 分析表

BEGIN
   DBMS_STATS.gather_table_stats ('SH', 'SALES');
END;

Step5. 分析表后统计信息变更为最新

统计 9

Step6.
解析计划Cardinality变更更为准确

统计 10

 

Thanks and Regards

参考: 一江水 –
http://www.cnblogs.com/rootq/archive/2010/02/04/1663622.html

参考: David –
http://blog.csdn.net/tianlesoftware/article/details/4668723

参考: Edwardking888 –
http://blog.itpub.net/8183550/viewspace-666335/

统计 11