SQL 优化

来源:互联网 发布:linux android 模拟器 编辑:程序博客网 时间:2024/04/26 01:55

SQL 优化

1、一般的sql优化技巧

* 避免使用“*”替代所有列         --清晰列,避免Oracle分析 *

一条SQL的执行分3步:  语法分析与编译、执行、存取数据。

* TRUNCATE 代替 DELETE

* 在确保完整性的情况下,多用COMMIT语句

* 尽量减少表的查询次数

SQL>select tname from teacher

    where tid = (select tid from student wheresname=’杨小七’);  --两次查询表

SQL>select tname from teachert

           full jion student s ont.tid=s.tid

                wheres.sname=’杨小七’;       --一次查询。

* EXISTS替代IN

* WHERE 替代 HAVING

* 用“<=”替代“<”

1.2 表连接

* 选择 FROM表的顺序。---解析表时,从右到左,最后一个表为驱动表,选记录最少的作驱动表

* WHERE 子句的连接顺序。--自下而上解析,能过滤掉大数据量的放在末尾。

* 使用表的别名。   --减少Oracle解析。

1.3 有效使用索引

* 使用索引的基本事项

       使用索引的确快,但是索引要占据存储空间,需要进行定期维护,每当表中有记录增减或索引列被修改时,索引本身也会被修改。这就意味着:每条记录的INSERT、DELETE、UPDATE操作都要使用更多的磁盘I/O 

       而且很多应经不必要的索引,甚至会影响查询效率。

* 避免对索引列使用 NOT

* 避免对 唯一索引列 使用 IS (NOT) NULL

* .选择 复合索引 主列

       @ 选择经常在 WHERE 子句中使用且由 AND 操作符连接的列作为复合索引列。

       @ 选择 WHERE 子句中使用频率相对较高的列 作为复合索引的主列。

            例如,如果 orgId列 的使用频率 比 deptId 高,那么创建索引时 orgId应该在前

* .监视索引是否被使用

    因为不必要的索引会起负作用。

--添加监视

system@SDROLUN>alter indexidx_ename monitoring usage;

索引已更改。

--通过 V$OBJECT_USAGE 视图来了解该索引的使用状态

system@SDROLUN>selecttable_name, index_name, monitoring from v$object_usage;

TABLE_NAME                    INDEX_NAME                    MON
------------------------------ ---------------------------------
EMPLOYEE                      IDX_ENAME                     YES

* .

* .

前一篇:数据库对象类型
后一篇:Oracle闪回功能----——恢复偶然丢失的数据
0 0