一、最好查询语句中不要使用“*”来代替列名,而采用实际会用到的列名。
因为星号会查询一个表所有的列,这会消耗系统的查询时间
二、尽量减少表查询次数
三、用[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进行修改