学习over partition by调优

1、准备数据

DROP TABLE  TEST;

CREATE TABLE TEST(

 ID  VARCHAR2 ( 32 )  PRIMARY KEY  ,

 NAME  VARCHAR2  ( 20 ),

 AGE NUMBER ( 3 )

);

INSERT INTO TEST_Y  VALUES (SYS_GUID(),   '张三' , 21  );

INSERT INTO TEST_Y   VALUES (SYS_GUID(), '张三' , 32  );

INSERT INTO  TEST_Y  VALUES (SYS_GUID(), '贝多芬' , 33  );

INSERT INTO  TEST_Y  VALUES (SYS_GUID(),  '李四' , 35   );

INSERT INTO  TEST_Y  VALUES (SYS_GUID(),   '五五' , 43   );

INSERT INTO  TEST_Y  VALUES (SYS_GUID(),   '小六' , 34  );

INSERT INTO   TEST_Y  VALUES (SYS_GUID(),   '小六' , 21   );

INSERT INTO   TEST_Y   VALUES (SYS_GUID(),   '小六' , 19  );

INSERT INTO  TEST_Y  VALUES (SYS_GUID(),   '甲六' , 28 );

INSERT INTO   TEST_Y  VALUES (SYS_GUID(),   '田四' , 26   );

INSERT INTO   TEST_Y   VALUES (SYS_GUID(),   '春风' , 31   );



SELECT   *   FROM   TEST;

2、根据名字进行查询,如果重名则根据年龄进行排序

select name,age ,ROW_NUMBER() over(partition by name order by age desc)  from TEST;

 

查看执行计划

可以看到上面两个条件走的全表扫描,TEST_Y.NAME和TEST_Y.AGE,首先尝试创建一个组合索引,并且全部是升序,更新统计信息,查看结果

create index "IND_NAME_AGE_TEST" on "SYSDBA"."TEST"("NAME","AGE");

 

再尝试将组合索引的age列改成降序

create or replace  index "IND_NAME_AGE_TEST_Y" on "SYSDBA"."TEST_Y"("NAME","AGE" DESC);

更新统计信息,查看执行计划

发现走了索引,消除了排序

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值