ORACLE基础count()的使用及分页查询

环境:Oracle11g

数据:一份一百万的数据

在Orcale中count(计数) 聚合函数是最常用的,但是也有count(*),count(1),count([列])的区别:

在网上看到的基本就是说

         count(*)    是全表扫描。

         count(1)   会过滤掉一整行为Null的行

    一般表中是不会存在一整行的值都为空的(null)。如要查找一整行都为null的行数可用

                               select count(null) from TabelA

      count([列])   指定某一列扫描,会过滤掉该列为null的值

测试结果使用count(*),count(1),count(null),count(rowid)和count([列])都花了三十几秒,因为不存在空行,所以计数结果也一样。效率差别不大。

考虑到效率问题,可以使用主键列查询count([主键]),或在某一列上建立索引INDEX,然后使用count([索引列]),明显效率就提升了,一样的结果只花了一秒多时间。



分页查询:

1、使用Row_Number()

SELECT * FROM (  SELECT ROW_NUMBER() OVER (order by T.字段名)AS Rowss, T.*  from 表名 T  WHERE 条件  ) TT WHERE TT.Rowss between 开始 and 结束

    必须要有order by 来作为行号标准

2、使用Rowid

SELECT * FROM (SELECT ROWNUM RN,RD FROM(SELECT ROWID RD FROM 表名 S WHERE 条件 ORDER BY S.字段)T WHERE ROWNUM<=结束)P,MP_MUILTNETREPORT A WHERE RN>=开始 AND P.RD=A.ROWID

    排序字段order by可写可不写。

在Oracle11g中测试,数据量大时明显使用Rowid比Row_Number()快的多。

      



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值