Oracle 起步日记(22)——SQL调优

 

索引

 

在DB中,索引建立的目的就是为了避免对表的扫描,以此减少大量的I/O操作,从而提高系统的性能

 

创建索引的一些规律

表的主键和外键必须要有索引

对经常与其他表进行连接的表的连接字段应该建立索引

经常出现在WHERE子句中的字段应该建立索引

小字段应该建立索引

复合索引的建立需要经过仔细分析,尽量考虑用单字段索引代替

 

使用一个索引存取多行数据,在唯一索引上使用索引范围扫描的情况是在WHERE中使用了范围操作符

 

创建索引

CREATE UNIQUE INDEX student_id_index ON student(id);

 

使用SET AUTOTRACE TRACEONLY显示语句执行计划,此语句显示执行计划而不真正执行,它会大大减少优化时间,不过可以用来分析,用SET AUTORACE OFF结束执行计划的显示,切换回正确执行语句的方式

 

如执行SELECT * FROM STUDENT WHERE ID > 100;如下图可以看到索引扫描的存取模式为INDEX RANGE SCAN

tupian1

其实还有全索引扫描,和全表扫描,全索引就是INDEX FULL SCAN,全索引扫描的情况是其查询出的数据必须从索引中可以直接得到

 


 

SQL语法调优

 

调优SQL的目的是避免没有必要的全表扫描,避免没有效率的查询

 

1)  避免在索引字段中使用IS NULL 和 IS NOT NULL(全表扫描)

可以将NULL补成有效值,比如学生学号无法为负数,则可用 Sno >= 0

 

2)  尽可能不采用“!=”(全表扫描)

索引只能告诉有什么样的数据存在于表中

 

3)  函数变化(全表扫描)

针对条件字段进行函数运算会造成全表扫描,其实对函数进行一些变换即可,如下

WHERE id * 2 > 2 可改为 WHERE id > 2/2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值