加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle数据字典、索引、序列

发布时间:2020-12-12 13:41:57 所属栏目:百科 来源:网络整理
导读:*************************数据字典******************************* 普通的表 是用来存放 应用程序 需要的数据的 student表 是存放学生信息的 category 表 是存放 商品种类信息的 oracle 也是一个应用程序,oracle这个系统级应用程序本身也需要存放一些数据,

*************************数据字典*******************************

普通的表 是用来存放 应用程序 需要的数据的

student表 是存放学生信息的

category 表 是存放 商品种类信息的


oracle 也是一个应用程序,oracle这个系统级应用程序本身也需要存放一些数据,这些
数据存到哪张表中呢? 存到一个特殊的表中,这个特殊的表叫做数据字典表,它是为oracle

本身服务的.


演示代码:

?

--1. 查看当前用户下有哪些表

select TABLE_NAME from user_tables

--2. 查看当前用户下有哪些视图

select VIEW_NAME from user_views

--3. 查看当前用户下有哪些约束
select CONSTRAINT_NAME from user_constraints


select * from user_constraints where constraint_name=‘SYS_C0016608‘


--4.查询dept表有哪些字段

select * from user_tab_columns where table_name=‘DEPT‘

?

--5.查询到底有哪些数据字典表
select TABLE_NAME from dictionary

--6.查询和用户相关的数据字典表有哪些
select TABLE_NAME from dictionary where TABLE_NAME like ‘USER_%‘

?

*********************SQL语句优化最基本的技巧************************

使用字段名 代替 *

因为如果程序员写 select * from emp

oracle执行的时候 会先去查 user_tab_columns这张字典表 把*转换成所有的字段名


查询数据字典需要时间 所以最好使用字段来代替

?

一.什么是索引

用来提高查询速度的数据库对象


可以理解为 查字典时 的目录

?

二.为什么用索引


作用: 提高查询速度


索引(类似查字典,按拼音查,按部首查) 张642 页 第5个字


没有索引时
要查的次数 641页*10个字 + 5=6415

有了目录: z 26+3 +5=34

zha

zhan

zhang 642


三.how


创建索引的原则


1. where 条件
group by 条件

order by


在经常查询的字段上加索引...


2. 连接条件

?

3. 在5m以下的表 查询返回的结果集在5%左右数据时 使用索引


如果是一个超大的表 product表 即使加了索引 也没有太大的作用


如果是一张超大的表 最好的优化策略 大表 划分成若干个小表


手机product 笔记本product ...

?

创建索引的语法:


create index 索引名 on 表名(字段)


***也可以建立组合索引,查询组合的时候效率更高


create index 索引名 on 表名(字段1,字段2)

select * from 表名 where 字段1=... and 字段2= ..


***************************初始化数据**********************************


select * from category

insert into category values(1,‘手机‘,‘通讯工具‘)

begin
for i in 1..500000 loop
insert into product values(i,‘商品名称‘||i,‘商品描述‘||i,1);
end loop;

commit;
end;

?

************************执行计划(解释计划)***********************************

1.没有加索引的时候 默认是全表扫描

Table Access Full


ROWS 基数 Card 预计返回的结果集个数

Bytes 返回的结果集占用的字节数

Cost 耗费 2(0) 占用cpu的百分比

一般Cost越小表示执行计划越优,执行速度越快,只是一个参考值,不一定

Time SQL语句 预计消耗的时间

?

************************索引的优缺点***********************************

优点: 提高查询速度

缺点:

1. 如果在一个表中频繁做 插入或删除操作 使用索引反而会降低 SQL语句的执行速度
因为插入、删除数据时 不仅要插入数据 而且要维护索引


2. 索引是占用空间的

?

************************索引的分类***********************************

第一种分法

1. 唯一性索引

主键和 unique 约束的字段 系统会自动为这些字段创建唯一性索引

2. 非唯一性索引

用户手工创建的索引都属于 非唯一性索引


第二种分法


1. 聚集性索引

物理位置上真正排序了 索引顺序和物理顺序是一致的


拼音


2. 非聚集性索引


物理位置上并没有排序 只是建立了一个指针...


部首

?

********************************oracle中的索引*******************

1. B树索引

适合高基数字段的查询(字段值重复比较少或没有重复)


2. 降序索引

是一种特殊的B树索引

select ename,hiredate from emp

where hiredate between to_date(‘1981-01-01‘,‘yyyy-mm-dd‘) and to_date(‘1981-12-31‘,‘yyyy-mm-dd‘)

order by hiredate desc


3. 函数索引


需求: 查询员工名称为SMITH的员工信息


create index index_emp_ename on emp(lower(ename))

select * from emp where lower(ename)=‘smith‘、


降序索引和函数索引都属于B树索引

?

4. 位图索引


在查询 低基数 字段 上 使用位图索引 可以提高查询性能


低基数(字段值重复比较多) 例如 emp表的 deptno字段


需求: 查询部门编号为10 的员工的信息


部门编号这个字段 重复比较多


只有3个基数 deptno=10、deptno=20、deptno=30


银弹 1987 xxx 发表了篇软件工程的论文

软件工程中没有银弹的概念 10年内没有一种方法或技术 能提高软件产品的生产力提高10倍以上


同样 索引也不是提高性能的百分百绝对的方法...提高性能的最好的方式是提升硬件

?

?

一. 什么是序列

oracle 用来产生主键的一种方式


第一次值是1,每次自增1...依次类推

?

二.how

每一张表都应该有一个序列,该序列专门为这张表创建主键


create sequence seq_表名


例如

create sequence seq_article;

如何使用

insert into article values(seq_article.nextval,‘标题1‘,‘标题2‘)

insert into article values(seq_article.nextval,‘标题2‘,‘标题2‘)


查询序列当前值

select article.currval from dual;


**************************解决oracle序列从2开始的问题*************************

create sequence seq_article minvalue 0 start with 0 increment by 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读