oracle学习笔记(其他对象和SQL优化)

视图:

CREATE VIEW 视图名AS

SELECT 子查询

 

SELECT * FROM 视图名;

 

索引:

CREATE INDEX 索引名ON表名 (列名1,  列名2)

DROP INDEX 索引名.

注意:索引会加快查询速度,但会减慢修改和新增的速度,所以一般只在查询次数多的列上加索引,主键会在建立时自动加索引

             

序列

创建序列

CREATE SEQUENCE 序列名

INCREMENT BY 1   -- 每次加几个

START WITH 1   -- 1开始计数

MAXVALUE 1000000 -- 不设置最大值

NOCYCLE        -- 一直累加,不循环

;

 

使用序列

序列名.CURRVAL--返回序列的当前值,不增加值

序列名.NEXTVAL=增加序列的值的值,然后返回增加后的值

 

可以使用序列的地方:

- 不包含子查询、snapshotVIEW SELECT 语句

- INSERT 语句的子查询中

- INSERT 语句的VALUES

- UPDATE SET

 

注意: 1.CURRVAL必须初始化后才能使用,即必须使用过NEXTVAL后才能使用CURRVAL

2. 第一次NEXTVAL 返回的是初始值,以后NEXTVAL 会增加你定义的增量

3. 一次NEXTVAL 会增加一次SEQUENCE 的值,如果同一个语句里面使用多个NEXTVAL,那么会多次增加值

 

删除序列

DROP SEQUENCE stuno_序列名;

 

SQL语句优化:

1.表名顺序:

ORACLE 的解析器按照从右到左的顺序处理FROM 子句中的表,选择记录条数最少的表作为基础表。如果有 3 个以上的表连接查询, 那就需要选被其他表所引用的表.作为基础表

 

2WHERE 子句中的连接顺序.:

ORACLE 采用自下而上的顺序解析WHERE 子句, 滤掉最大数量记录的条件必须写在WHERE 子句的末尾.

 

3SELECT子句中避免使用 * 号:

ORACLE 在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据,字典完成的, 这意味着将耗费更多的时间

 

4.整合简单,无关联的数据库访问

如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(UNION子句)

 

5.尽量多使用COMMIT 释放内存中的资源

6.使用表的别名:

当在SQL语句中连接多个表时, 使用表的别名并把别名前缀于每个列上

 

7.用EXISTS替代IN、用NOT EXISTS 替代NOT IN

使用EXISTS(NOT EXISTS)通常将提高查询的效率.。在子查询中,NOT IN子句将执

行一个内部的排序和合并。无论在哪种情况下, INNOT IN 都是最低效的

 

8SQL语句用大写。

 

9.避免在索引列上使用NOT

通常我们要避免在索引列上使用NOT,  NOT会产生在和在索引列上使用函数相同的影响。 ORACLE遇到NOT,他就会停止使用索引转而执行全表扫描。

 

10.避免在索引列上使用函数和计算:

WHERE 子句中,如果索引列是函数的一部分,oracle将不使用索引而使用全表扫描.

 

11.用>=替代>

 

 

全部笔记文档:点我下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值