select优化的⼏个⽅法
⼀,关于索引:
使⽤索引的合理性:sql优化的几种方式
条件⼦句中变量顺序应与索引字键顺序相同。(尽可能在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性能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论