视图:
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=增加序列的值的值,然后返回增加后的值
可以使用序列的地方:
- 不包含子查询、snapshot、VIEW 的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 个以上的表连接查询, 那就需要选被其他表所引用的表.作为基础表
2.WHERE 子句中的连接顺序.:
ORACLE 采用自下而上的顺序解析WHERE 子句, 滤掉最大数量记录的条件必须写在WHERE 子句的末尾.
3.SELECT子句中避免使用 * 号:
ORACLE 在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据,字典完成的, 这意味着将耗费更多的时间
4.整合简单,无关联的数据库访问 :
如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(UNION子句)
5.尽量多使用COMMIT: 释放内存中的资源
6.使用表的别名:
当在SQL语句中连接多个表时, 使用表的别名并把别名前缀于每个列上
7.用EXISTS替代IN、用NOT EXISTS 替代NOT IN:
使用EXISTS(或NOT EXISTS)通常将提高查询的效率.。在子查询中,NOT IN子句将执
行一个内部的排序和合并。无论在哪种情况下, IN和NOT IN 都是最低效的
8.SQL语句用大写。
9.避免在索引列上使用NOT :
通常我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响。 当ORACLE遇到NOT,他就会停止使用索引转而执行全表扫描。
10.避免在索引列上使用函数和计算:
WHERE 子句中,如果索引列是函数的一部分,oracle将不使用索引而使用全表扫描.
11.用>=替代> 。
全部笔记文档:点我下载