赞
踩
第一章 Oracle部分
一,概念知识点
1.分布有哪些不同的类型?
范围分区, 列表分区, 散列分区,组合分区
2.每种类型一般使用在什么场景?
范围分区:用指定的分区键决定的范围进行分区,最为常用,分区键常采用日期。
列表分区:某列的值只有几个,可以采用列表分区
散列分区:通过指定分区数量或编号来均匀分布数据 的一种分区类型,分区数量常采用2的N次方;当列的值没有合适的条件时,采用散列分区;
组合分区:范围分区和列表分区组合,范围分区和散列分区组合,分区中的分区被称为子分区
3.哪种分区类型使用的最多?为什么?
看具体情况
如果需要进行数据的过期化处理,那么范围分区基本上是唯一的选择
如果需要数据的均匀分布,那么可以考虑使用HASH分区
如果数据的值可以很好的对应某个分区,那么就可以考虑使用列表分区
在上面的原则基础上,再结合性能的影响因素,来最终确定使用哪种类型的分区
4.有没有用过组合分区?怎么搭配的?
范围+列表
范围+散列
列表+散列
5.分区表创建的基本语法是什么?
create table 表名
(字段名,字段类型……)
partition by rangr (字段名)
(partition by 子分区名 values less than (某个日期))
6.分区还有那些不同的操作?
添加分区 ,删除分区,截断分区,合并分区,拆分分区,重命名分区
7.怎么去查看表格分区的信息?
select * from user_tab_partitions a where a.table _name = '表名';
8.对分区字段进行where筛选和直接读取分区内容,谁更快一些?
select * from fq_emp_list where deptno = 10;
select * from fq_emp_list partition(d10); 分区更快一些
9.索引的概念
索引相当于目录,是 对某些特定列中的数据进行排序,生成 索引表,该列作为where条件时,扫描索引列,根据rowid快速定位具体记录,提高查询效率。
10.索引有哪些不同的类型?
主键 唯一 普通 组合 函数 位图 分区索引分为本地和全局
11.不同的索引一般用在什么场景?
唯一索引:当某列任意两行数据不相同,建立在 primary key 主键 和unique constraint 唯一约束时(索引自动建立)
组合索引:当多列经常一起出现在where 条件中,创建索引。
位图索引:当一列有大量重复数据时创建
函数索引:在WHERE 条件语句中包含函数或表达式时建立
12.普通索引和位图索引有什么区别?
普通索引:列的内容没有什么特定点,但是经常需要被进行查询创建
位图索引:列中有非常多的重复的值时创建,例如某列保存了“性别”信息创建
13.索引在什么情况下会失效?
针对索引使用函数
索引列算数运算
索引列隐式转换
!=和null判断
like “%_”百分号在前
14.索引的优缺点?
索引优点:创建唯一索引,可以保证数据库中的每一行数据的唯一性;可以加快数据的检索速度;可以加速表和表之间的连接
索引缺点:创建和维护索引要耗费大量时间;索引会占物理存储空间,对表中数据进行操作,索引也要动态维护
15.哪些列该建立索引?哪些列不该建立索引?
建立索引:经常需要搜索,排序的列,关联字段
不该建立索引:很少使用的列;只有很少数据值的列;定义为TEXT,image,bit,数据类型的列
6.唯一索引和主键索引有什么区别?
主键时不能自己独立创建,和主键约束一起创建的
唯一可以和约束一起创建,也可以单独创建
主键是保证字段不能空不能重复,唯一只能保证不重复
17.索引中本地索引和全局索引的区别是什么?
本地索引不能创建唯一索引的类型,因为每个小的索引只能保证每个分区的数据是唯一的,不能保证整个表格的数据是唯一的
全局索引不能创建位图索引的类型,统一管理的索引不能对整个表格中,每个独立的分区的数据进行识别和判断
18.回表
使用普通索引的时候,如果索引里不包含全部要查找的字段,则需要回到主键索引里查找需要的字段,这个过程也叫做回表
19.怎么查找一个表格有哪些不同的索引?
select * from user_indexs where table_name ='表名'
20.Oracle 里面,如果有一个sql语句运行的慢,怎么办?
(1)查看执行计划,查看句子消耗的资源和内部运行的逻辑,查看语句是否运行复杂等,查看每个自居运行的过程
(2)给数据量非常大的表格建分区(emp表为例,2个G是8000多万)
(3)给查询的字段进行索引的创建
(4)查看有没有索引失效
(5)OR会导致表格重复被读取从而效率低下
(6)sql语句频繁的对硬盘进行了读写,可以把语句写成代码块,(例如存储过程)让硬盘的读写次数减少
(7)sql语句可能会在客户端和服务器之间来回的进行数据交互,这个时候也可以写成代码块 减少客户端和服务器之间的交互次数
(8)还可以使用优化器里面的PARALLEL进行sql语句的并行处理
21.Oracle有哪些常见的数据类型?
interger number char varchar2 date blob clob
22.varchar 和varchar2 的区别
(1)varchar是标准sql里面的。 varchar2是oracle提供的独有的数据类型。
(2)varchar对于汉字占两个字节,对于英文是一个字节,占的内存小,varchar2都是占两个字节。
(3)varchar对空串不处理,varchar2将空串当做null来处理。
(4)varchar存放固定长度的字符串,最大长度是2000,varchar2是存放可变长度的字符串,最大长度是4000.
(5)如果是要跟换不同的数据库,例如mysql,那么就用varchar,如果就用oracle,那么用varchar2比较好一点
23. minus的含义
差集,查询第一个表中有但是第二个表中没有的数据
24.在左连接里面,如果使用and筛选 和用where 筛选,区别是什么?
a b
1 1
2 2
3 4
SELECT * from a left join b on a.id = b.id and a.id = 2
1 null
2 2
3 null
select * from a left join b on a.id = b.id where a.id = 2
2 2
25.左边表有身份证信息,右边表也是身份证信息,查询左边有但是右边没有的身份证
(1)select * from a
minus
select * from b;
(2)select * from a where id not in (select * from b)
(3)select * from a left join b on a.id = b.id where b.id is null
26.经常用到的函数有哪些?
聚合函数: max min avg sum count
单行行数:
数字: abs round trunc floor ceil power mod
字符串: substr concat instr replace length wm_concat translate ltrim rtrim lpad rpad upper lower initcap
分析函数:
排名: row_number rank dense_rank
平移:lag lead
逻辑函数: nvl nvl2 decode case...when pivot unpivot
转换函数:to_number to_char
27.伪列有哪些有什么用?
rowid 利用唯一性进行表格的去重操作,索引也是使用rowid进行行数据查询的
rownum进行表格的分页查询
28.表空间怎么创建,怎么查看,有什么作用?
create tablespace 名字 datafile ' 路径' size xxxM;
select * from user_tablespace;
将表格或者分区和电脑上的数据文件进行绑定的一个数据库对象
29.执行计划里面经常要查看哪些内容?
执行计划是一条查询语句在oracle中的执行过程或访问路径。
执行完一条select 语句之后,在plsql执行计划窗口查看,或按F5 即可查看刚执行的这条查询语句的执行计划,或者在命令窗口输入:
explain for select 语句
主要看一下内容:
(1)执行顺序:缩进最多的先执行,同一级的动作遵循最上最右先执行。
(2)表扫描方式:全表扫描,索引扫描
(3)关联机制:嵌套循环,哈希连接,排序合并连接
(4)耗费(cost)cpu耗费:Oracle 估计的该步骤的执行成本,用于说明sql执行的代价,理论上越小越好
30.什么是视图,优点缺点是什么?
视图是一张或多张表上的预定义查询。
优点:减少子查询的复杂性;提高运行效率;可以仅提供视图数据,提高数据安全性。视图以定义的 方式存储在数据库,不占用表空间
缺点:视图只 提供查询,不能修改,若源表数据删除后,视图数据也没有。
31.什么是物化视图?和视图的区别是什么?
视图固定为表成为物化,物化视图是当时建立视图时固定下来的数据,如果原表数据有更新,物化视图中的数据是不变的。
物化视图是一种特殊的物理表,“物化”视图是相对普通视图而言的,
普通视图是虚拟表,应用的局限性大,任何对视图查询,Oracle都实际上转化为视图sql语句的查询。这样对整体查询性能的提高,并没有实质上的好处。
32.存储过程有哪些代码构成?
create or replace procedure 名字(参数,类型)
as
声明
begin
执行
expection
异常
end;
33.什么时候你会些存储过程?
复杂的逻辑会写存储过程;
一些数据库的固定操作;
表的数据抽取的ETL操作;
使用存储过程来对sql语句进行优化,减少硬盘的读写和服务器之间的交互次数。
34.存储过程和函数的区别:
(1)返回值的区别,函数有一个返回值,而存储过程时通过参数返回的,可以有多个或者没有;
(2)调用的区别,函数可以在查询语句中直接调用,而存储过程,必须单独调用;
函数一般情况下,是用来计算并返回一个计算结果而存储过程一般是用来特定的数据操作(比如说修改,插入数据库表或执行某些DDL语句等)
35.数据仓库是 用什么方法来保存历史数据的
数仓仓库保存历史数据通常是在DW层或者是HDW层 创建拉链表来保存历史数据。每次更新数据都会通过update 进行逻辑删除,然后将最新的数据插入到拉链表中,并将历史数据更新成无效状态,将最新的数据更新为有效状态。
36.如果Oracle 运行提示 no data found 是什么原因造成的?
select into 的时候 ,where 筛选的过程没有找到数据
37.拉链表是什么结构 ?什么是缓慢变化维?
拉链表:是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链表,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。
维度建模的数据仓库中,有一个概念叫 slowly changing dimensions ,中文叫缓慢变化维;经常被简化为SCD。缓慢变化维 的提出是因为在现实世界中,维度的属性并不是静态的,他会随着时间流失发生缓慢的变化。这种随时间发生变化的维度我们称之为缓慢变化维,并且把处理维度表历史变化信息的问题称之为 处理缓慢变化维 的问题,有时也称之为处理scd的问题。
处理缓慢变化维的方法通常为三种方式:
第一种方式是:直接覆盖原值。这样处理最容易实现,但是没有保留历史数据,无法分析历史变化信息,第一种方法简称为“TYPE 1”
第二种方式是:添加维度行,这样处理,需要代理键的支持。实现方式是当有维度属性发生变化时,生成一条新的维度记录,主键是新分配的代理键,通过自然键可以和原维度记录保持关联,第二种方式简称为“TYPE 2”
第三种方式是:添加属性列。这种处理的实现方式是对于需要分析历史信息的属性添加一列,来记录该属性变化前的值,而本属性字段使用“TYPE 1”直接来覆盖。这种方式的优点是可以同时分析当前及前一次变化的属性值,缺点是只保留了最后一次变化信息。第三种方式简称为“TYPE 3”
38.Oracle 数据库日常维护的端口号是多少?
默认是1521
39.Oracle数据库日常维护?
检查Oracle示例状态,检查Oracle服务进程,检查Oracle监听进程;
40.什么是伪列?有哪几种?区别在哪里?
(1)rowid:表中的每一行在数据文件中都有一个唯一物理地址,rowid 伪列返回的就是该行的物理地址,使用rowid可以快速的定位表中的某一行,所以可以用来去重。
(2)rownum:为结果集中每一行表示一个行号,第一行返回1,第二行返回2,依次类推,通过rownum伪列可以限制查询返回的行数。
41.如何使用rowid去重?
delete from 表名 别名 where rowid not in(select min (rowid))from 表名 别名 group by 列名 )
如果想通过rowid 去重,那么在delete 重复数据时 ,需要 group by 表的所有字段。如果只 group 不要表的个别字段,那么会造成误删除。
42.如何分页查询?
可以使用伪列rownum 进行分页查询
--举例 :第一页显示前五行
select rownum ,e.* from e
where rownum <=5 --查询前五行不能大于
--第二页显示6-10
select * from (
select rownum rn ,e.*from emp e ) t where t.rn>5 and t.rn <11
--第三页显示11-14
select * from
(select rownum rn ,e.* from emp e
) t where t.rn >10 and t.rn<15
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。