昨天转载了host01的
一篇同名文章(
http://blog.youkuaiyun.com/lif_009/archive/2006/08/21/1104156.aspx),有些感想,今天把我自己在平时总结的经验也谈谈。
1、首先考虑使用索引
索引分为聚镞索引和非聚镞索引。聚镞索引是按数据的物理位置来排列的理论上它的检索速度要比非聚镞索引快。只是针对查询语句,如果是更新语句,如insert则因为更新数据的同时需要更新索引,会比没有索引的表来得慢:) 一个技巧-->如果查询语句实在没有用到索引的列,就构造一个结果为真的条件,如:where aa>0 (aa的值是自然数,一个本来就成立的条件)
2、多表连接如何优化
首先确定一个的基准表作为驱动表,这个表会用到索引,记录检索量较小,和大部分表相连。放在from所有表的最右边,按相同的判断标准从右向左放置,例:from cc,bb,aa 其中aa就是我的驱动表。不要小看这个动作哟,很多查询稍微调整表的位置效率会大大改善。
3、有索引的字段直接使用,不要在字段上加计算,如substr(col,2)、col||'name'等,加了就用不上索引了!!!
4、where子句中的连接顺序
oracle采用自下而上的顺序原则进行解析,所以表间连接关系需要写在其他条件之前,能筛除大量数据的条件语句尽量放在最后。
5、在select中尽可能不要使用*,因为系统会将起一一转化为列名,这个过程是需要对应数据字典的。
6、在删除表数据时用truncate代替delete,因为delete会些回滚段,特别是数据量大的时候速度差别是明显的。
1、首先考虑使用索引
索引分为聚镞索引和非聚镞索引。聚镞索引是按数据的物理位置来排列的理论上它的检索速度要比非聚镞索引快。只是针对查询语句,如果是更新语句,如insert则因为更新数据的同时需要更新索引,会比没有索引的表来得慢:) 一个技巧-->如果查询语句实在没有用到索引的列,就构造一个结果为真的条件,如:where aa>0 (aa的值是自然数,一个本来就成立的条件)
2、多表连接如何优化
首先确定一个的基准表作为驱动表,这个表会用到索引,记录检索量较小,和大部分表相连。放在from所有表的最右边,按相同的判断标准从右向左放置,例:from cc,bb,aa 其中aa就是我的驱动表。不要小看这个动作哟,很多查询稍微调整表的位置效率会大大改善。
3、有索引的字段直接使用,不要在字段上加计算,如substr(col,2)、col||'name'等,加了就用不上索引了!!!
4、where子句中的连接顺序
oracle采用自下而上的顺序原则进行解析,所以表间连接关系需要写在其他条件之前,能筛除大量数据的条件语句尽量放在最后。
5、在select中尽可能不要使用*,因为系统会将起一一转化为列名,这个过程是需要对应数据字典的。
6、在删除表数据时用truncate代替delete,因为delete会些回滚段,特别是数据量大的时候速度差别是明显的。