Dust Of Dream

知识真的是一个圆么?

Oracle SQL培训笔记[开发人员][三]

四 索引与分页--怎么样SQL运行的更快

  1. 正确的使用索引
    Where条件落在索引上
    不要在where的=前使用函数,否则无法使用索引
    Is Null可能无法使用索引
    不正确的隐式转换可能不能使用索引
    如果能在索引获得数据,就不要回表
    如果是复合索引,注意第2个字段以后,可能使用不到索引
  2. 正确的使用hint
    如果有别名,一定要有别名
    格式如/*+ index(t index_name) */
  3. 无需回表查询的分页写法
    存在以下表T1(A,B,C,D) T1上有索引字段(B,C) .如果只是查B,C两个字段则:
    select *
      
    from (select tt.b, tt.c, rownum as rn
              
    from (select t.b, t.c from t1 t where c = 2 order by t.c) tt
             
    where rownum < 3)
     
    where rn > 1
  4. 需回表查询的分页写法
    select /*+ ordered use_nl(t,t1) */ 
          
    * 
           
    from (select rid from (
              
    select rownum rn,rid from (
                
    select rowid rid from t1
                 
    where c=2 
                 
    order by c desc
              
    where rownum <= 50
           
    where rn >=1) t,
           t1
    where t.rid=t1.rowid;


posted on 2007-10-01 12:48 Anemone 阅读(938) 评论(1)  编辑  收藏 所属分类: 牧羊阵法

Feedback

# re: Oracle SQL培训笔记[开发人员][三] 2008-05-29 10:11 Anemone

对于分页写法只要写了hit(/*+ ordered use_nl(t,t1) */ )就不需要增加外排序了,它本身返回的结果就是排序的.  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

News

常用链接

留言簿(1)

随笔分类

随笔档案

新闻档案

相册

常去网站

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜