社区
Oracle
帖子详情
oracle中有没有方法快速得到表中记录的总数?
boots
2003-10-16 03:04:26
如题:
数据表中的记录一般都在200w以上,并且实时变化,希望快速得到数据表中的记录总数,以前在sqlserver上可以用sp_spaceused tablename这样的存储过程得到当前表的rows,不知道oracle中有没有类似的方法?
...全文
500
16
打赏
收藏
oracle中有没有方法快速得到表中记录的总数?
如题: 数据表中的记录一般都在200w以上,并且实时变化,希望快速得到数据表中的记录总数,以前在sqlserver上可以用sp_spaceused tablename这样的存储过程得到当前表的rows,不知道oracle中有没有类似的方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
boots
2003-10-17
打赏
举报
回复
tsj68(tsj) :
感谢感谢,这个位图索引也太快了吧.
boots
2003-10-17
打赏
举报
回复
tsj68(tsj) :
我建了索引怎么也不看不出来它快呀,这个适当的位图索引怎么建立?能否赐教?
我被这个东西给搞的都没有什么脾气了
bzszp
2003-10-17
打赏
举报
回复
用触发器会影响操作效率
可以的话,定时检索
zebero
2003-10-17
打赏
举报
回复
up
tiger9382
2003-10-17
打赏
举报
回复
不要用count(*),如果该表在某个字段上创建了索引(id),就用count(id),这样的速度会快很多。我曾经对一个6000万的表作计算,总共没有超过15秒
boots
2003-10-17
打赏
举报
回复
适当的建立一个位图索引,就可以利用索引来优化select count(*) from table_name语句,以避免全表扫描.我的一个表(oracle91)1500万条记录,没有索引时大于120秒,建了索引只用不到1秒.
我来试试看
robixiao
2003-10-16
打赏
举报
回复
用count(*)将引起full scan.
select count(column_name) from a.
其中column_name是表a的索引列,这样只会相关索引的读取.
tsj68
2003-10-16
打赏
举报
回复
适当的建立一个位图索引,就可以利用索引来优化select count(*) from table_name语句,以避免全表扫描.我的一个表(oracle91)1500万条记录,没有索引时大于120秒,建了索引只用不到1秒.
chanet
2003-10-16
打赏
举报
回复
select count(*) from a
smallcrocodile
2003-10-16
打赏
举报
回复
select count(col_name) from tab_name
已经很快了
boots
2003-10-16
打赏
举报
回复
"在表上创建一个行级触发器来监测表中记录的变化,并记录下来"
我现在就是这么干的,但这样严重影响数据库写入速度,
我的系统要求的写入速度很高的
select max(rownum) from tablename 我也试过了,速度几乎和count一样
还有更好的建议吗?
qiuyang_wang
2003-10-16
打赏
举报
回复
可以用 count(*) 来实现,但速度太慢。
用关联查询的方式也可以,估计速度也不会太理想:
select max(num) from (select rownum num from tablename);
建议:
在表上创建一个行级触发器来监测表中记录的变化,并记录下来。
需要一个表记录这些信息(包括表中记录条数最新统计数字)
具体实现方法很多,你自己好好考虑一下吧。
注意:操作回退的情况
bzszp
2003-10-16
打赏
举报
回复
建一个表,存放表名和条数
通过job定时调用计算条数的存储过程把结果保存到表中
这样取起来肯定快,但是实时性不强
boots
2003-10-16
打赏
举报
回复
count(*) 这样的操作对于我现在的应用实在太慢了,200W条记录count一次就要用快1分钟,无法忍受的呀,我觉得oracle这样的数据库应该有更简便的方法的呀
kerisyml
2003-10-16
打赏
举报
回复
select count(*) from tab_name不就可以实现了吗,需要那么麻烦吗
bzszp
2003-10-16
打赏
举报
回复
好像是没有
oracle
取得
表
中
总
记录
数最快的
方法
查询
表
中
的
记录
总数
的语法就是SELECT COUNT(*) FROM TABLE_NAME。这可能是最经常使用的一类SQL语句。 本文讨论怎样才能最快的
得到
这个
记录
数。本文纯粹主要是理论上的讨论,文章
中
很多内容(如常数索引)对实际的指导意义不大。 在具体描述之前,强调几个前提: 首先
表
中
的
记录
数不能太少,否则讨论的意义就不大了,在我下面的例子
中
记录
数是3万左右,其实这个数量级还是
oracle
表分区最大
记录
数,
Oracle
表
中
最大分区数
表
中
可以允许的最大分区数是多少,以前并没有太在意过。如果不查文档,
有没有
快速
的
方法
来
得到
结果呢。当时手工是11.2的环境,于是首先想到了INTERVAL分区,这样只需要建立一个INTERVAL为1的分区表,并不停的插入数据,
Oracle
会自动扩展分区,只到分区上限
Oracle
会报错。但是发现这种
方法
不但耗时很长,而且存在bug,
Oracle
频繁通过递归调用来创建分区,很快就会导致系统内存耗尽,6G...
Oracle
分组函数
当我们要统计一张表数据有多少的时候 例如,想查询employees表一共有多少条
记录
,难道就要把SELECT * FROM employees查出来然后再数一数有多少行吗? 虽然这个
方法
可以,但是不推荐使用。对于统计
总数
、平均数这类计算,
oracle
提供了专门的分组函数,就是通过使用分组函数进行查询,就是分组查询,它可以
快速
获得结果。 以查询employees表一共有多少条
记录
为例,我...
oracle
查100w条数据,给你100万条数据的一张表,你将如何查询优化?
1.两种查询引擎查询速度(myIsam 引擎 )InnoDB
中
不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键),加上where c...
如何
快速
的获取
oracle
数据库
中
表
中
记录
行数,不使用select count(1)方式
数据库版本:
Oracle
10G 今天查询下数据库
中
一个表的具体
记录
数,使用 select count(1) from [tablename],执行起来速度非常慢,所以想看看是否有更好的办法,发现,在tabs表已经存在了该表
记录
数据了,直接运行如下sql就可以了 select TABLE_NAME, CC.num_rows, CC.last_analyzed ...
Oracle
17,086
社区成员
55,238
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章