改变自己
我可以改变世界 改变自己

一,关于索引:

使用索引的合理性:

条件子句中变量顺序应与索引字键顺序相同。(尽可能在join和order by 的字段上建立索引)将最具有限制性的条件放在前面,大值在前,小值在后。

eg:…where O.a <1000 and O.a>200 效率高于 where O.a>200 and O.a<1000

…where O.a between 200 and 1000 效率高于 where O.a>200 and O.a<1000

二,关于通配符:

避免采用MATCHES和LIKE通配符匹配查询:

由于采用like等通配符查询时,sql优化器实际上还是用顺序搜索的方法来查询的,也就是说,在被查询的字段上建立的索引实际上是不起作用的。

eg:…where O.b <'12399' and O.b>'123000 ' 效率高于 where O.b matche '123*'

三,关于子查询:

查询嵌套层次越多,效率越低,因此应当尽量避免子查询。假如子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

eg:…from O1,O2 where O1.c=O2.c and O2.a=2009 效率高于 from O1 where O1.c in(select O2.c from O2 where O2.a=2009)

四,关于顺序存取时的嵌套查询:

在进行大数据量的索引归类时,有些形式的where子句会强迫优化器使用顺序存取,从而使得原索引字段失效。

eg:…where (O.d = 123 and O.a>200 ) union O.b=1010 效率高于 where (O.d = 123 and O.b>200) or O.b=1010

五,关于临时表:

使用临时表加速查询

把表的一个子集进行排序并创建临时表,有时能加速查询。注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注重不要丢失数据。

eg:…select unique tO1 into temp tO1 "然后(then)"select count(*)from temp tO1 效率高于select count(distinct)

六,关于聚集函数:

1.对于大数据量的求和应避免使用单一的sum命令处理,可采用group by方式与其结合,有时会大大提高效率。

2.避免会引起磁盘读写的 rowid* 等操作。在where子句中或select语句中,用rowid要产生磁盘读写,是一个物理过程,会影响sql性能。

posted on 2009-07-04 20:31  dashan  阅读(666)  评论(2编辑  收藏  举报