常规的sql查询优化

一、最好查询语句中不要使用“*”来代替列名,而采用实际会用到的列名。

因为星号会查询一个表所有的列,这会消耗系统的查询时间

二、尽量减少表查询次数

三、用[not] exists 代替[not] in

四、创建索引(最好是给每个查询条件的相关列都创建一个索引)

(1)创建索引的语句:

create index index_name on table_name(column_name);

(2)监视索引(通过监视,可以知道哪些索引未被使用,可将这些索引删除)

语句:

alter index index_name monitoring usage;

 (3)检查索引使用情况

语句:

select * from v$object_usage;

 (4)删除索引语句

drop index index_name;

 五、选择驱动表(紧跟from之后的表,通常以全表扫描的方式被访问)

给驱动表创建索引

六、尽量避免全表扫描大表

以下情况,oracle会进行全表扫描

(1)所查询的表没有设置索引

(2)需要返回所有的行,带星号"*"

(3)带like并使用“%”这样的语句

(4)对索引主列有条件限制,但使用了函数

(5)带有is null 、is not null 或!=等字句也会导致全表扫描

七、注意where子句的连接顺序

由于oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写在其他where条件之前。那些可以过滤掉最大数据记录的条件必须写在where子句的末尾,也就是在进行表连接操作之前,过滤掉的记录数越多越好。

八、查看执行计划,根据执行计划进行的cost进行修改

猜你喜欢

转载自zxq1007097830.iteye.com/blog/2360447