oracle mysql优化_Oracle数据库优化

封转数据库字段

varray 表

CREATE OR REPLACE TYPE EMPLOYER_NAME AS OBJECT

(

E_NAME VARCHAR(40)

)

;

CREATE OR REPLACE TYPE PRIOR_EMPLOYER_NAME_ARR AS VARRAY(10) OF EMPLOYER_NAME;

CREATE OR REPLACE TYPE FULL_MAILLING_ADRESS_TYPE AS OBJECT(STREET VARCHAR2(80), CITY VARCHAR2(80), STATE CHAR(2), ZIP VARCHAR2(10));

CREATE OR REPLACE TYPE EMPLOYEE AS OBJECT(LAST_NAME VARCHAR(40), FULL_ADDRESS FULL_MAILLING_ADRESS_TYPE, PRIOR_EMPLOYERS PRIOR_EMPLOYER_NAME_ARR);

CREATE TABLE EMP OF EMPLOYEE;

INSERT INTO EMP VALUES('Jim', FULL_MAILLING_ADRESS_TYPE('Airplan Ave', 'Rocky', 'NC', '2343'), PRIOR_EMPLOYER_NAME_ARR(EMPLOYER_NAME('IBM'), EMPLOYER_NAME('APPLE'), EMPLOYER_NAME('CNN')));

回滚

DROP TYPE PRIOR_EMPLOYER_NAME_ARR FORCE;

DROP TYPE FULL_MAILLING_ADRESS_TYPE FORCE;

DROP TYPE EMPLOYEE FORCE;

DROP TYPE EMPLOYER_NAME FORCE;

DROP TABLE EMP;

COMMIT;

封装字段的查询

SELECT P.LAST_NAME, PRIOR_EMPLOYERS.*

FROM EMP P, TABLE(P.PRIOR_EMPLOYERS) PRIOR_EMPLOYERS

WHERE P.LAST_NAME = 'Jim';

SQL 执行过程

1,检查安全性,确保sql数据执行者有权限执行

2,检查sql语法

3,可能发生的查询重新书写

4,执行

1.创建执行计划

2.生产器接受经过解析的sql

3.捆绑执行计划

4.执行执行计划

5.读取结果记录

6.排序结果集

SQL 执行级别

d64c6e6a01d70b4b2a21bfa8fd4dccf7.png

数据访问方式:

1,全表扫描 db_file_multiblock_read_count

顺序读取,知道结尾

1.当表中不存在索引

2.查询中不包含where字句

3.内置函数中的索引无效

4.like操作 %开头

5.使用基于成本优化器 数据量少时

6.当初始化文件中存在optimizer_mode = all_rows

2, 赛列获取

Oracle对单表簇和多表簇进行散列存储,用来在连接操作中减低输入 输出

3,ROWID 访问

通过Rowid访问单条数据最快的方式,在实际的引用中,首先从索引中收集ROWID,然后通过ROWID进行数据读取

索引访问方式

索引都可以看做一组符合主键和ROWID的组合,索引访问的目的是收集对目标快速读取时所需要的ROWID

B树索引,位图索引 基于函数的索引.

索引范围扫描:读取一个或者多个ROWID 索引数值升序排列

eg:select * from table where a = 'a';

快速全索引扫描

eg: select distinct color,count(*) from table group by color;

单个索引扫描:读取一个单独的ROWID

降序索引范围扫描:读取一个或者多个ROWID 索引数值降序排列

AND - EQUALS:

select * from table where a = 'a' and b > 34;

从where字句中收集多个ROWID

连接操作

嵌套循环连接

14fe4a44c42dfdae0712a546787dd2f4.png

散列连接

04b7bb4de10a6f1493da1c0971cd21e7.png

排序合并连接

6f588c2bb7c0905c0543dabc856ca5cc.png

排序大小 sort_area_size_init.ora 参数

磁盘排序的执行速度要比内存排序的的执行速度慢14000倍

表连接的综合效率比较

79a43fbf9e90b089e13c0d088810eb9e.png

sql优化器

目的是为sql语句生成最快 并且好资源最少的执行计划

1,基于规则的优化器

步骤

对于在where子句中的每一个表

- 生成一个可行的执行计划列表,这个列表中列出所有可以用来访问表的路径

- 为每一个执行计划指定级别数值

- 选择级别数值最低的计划

- 对结果集的选择级别最低 连接方法进行评估

2,基于成本的优化器

44ef6438490a11b3c2dfddcfd403b3ab.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值