Select Count(*)的解决

fangerhua 2010-09-29 04:22:03
我原先在数据库的过程中使用了:
SELECT COUNT (*)
INTO icountnumber
FROM Recordmaster
WHERE (reckoningdate >= istartdate AND reckoningdate < ienddate)
AND (datatype = '01')
但是当数据量越来越大的时候,使用
COUNT (*)就不行了,全表扫描太受不了了;
如果在程序中,我可以用Query控件的Count来得到记录的行数,但是在Oracle的过程里怎么写才能得到icountnumber值,不用SELECT COUNT (*)的方式?
...全文
339 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjytiantang 2010-10-06
  • 打赏
  • 举报
回复
用显式游标试试。。
hovy_yang 2010-10-06
  • 打赏
  • 举报
回复
总之要换掉count(*)、随便你count(啥)
fxzlxh 2010-10-06
  • 打赏
  • 举报
回复
where条件家索引吧 或者组合索引 count(*)改成count(1)
心中的彩虹 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 fangerhua 的回复:]
我原先在数据库的过程中使用了:
SELECT COUNT (*)
INTO icountnumber
FROM Recordmaster
WHERE (reckoningdate >= istartdate AND reckoningdate < ienddate)
AND (datatype = '01')
但是当数据量越来越大的时候,使用
COUNT (*)就……
[/Quote]
count(1) 或者count(主键列)
wfqqwer5213 2010-09-30
  • 打赏
  • 举报
回复
当你表有主键的时候,count(1)=count(*)关键是你的reckoningdate 和datatype 要有索引,并且确认datatype 索引是varchar型的
Dream_1986 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 crazylaa 的回复:]

在reckoningdate 列上建索引。
count(*)改成count(1)
[/Quote]
http://blog.csdn.net/studyvcmfc/archive/2009/11/22/4852525.aspx
酸饼 2010-09-29
  • 打赏
  • 举报
回复
先看你的datype='01'能过滤掉多少数据。如果过滤掉的数据比较多,则对该字段加上索引。
reckoningdate字段,则要考虑你常用查询指定的时间范围大不大。如果这个时间范围比较小,对应的数据占总数的比例小的话,加上索引。

索引多了对插入有影响。要在插入、更新和查询之间取得一个平衡。
wangjianming45 2010-09-29
  • 打赏
  • 举报
回复
个人觉得加个reckoningdate和datatype组合索引。
siriusraider 2010-09-29
  • 打赏
  • 举报
回复
楼上人真多,照着楼上说的办法做吧,不加索引就是扫描全表了
gelyon 2010-09-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fangerhua 的回复:]

这个表有字段索引,但是不是reckoningdate 和datatype
[/Quote]
你表里有索引,但是你查询条件where里没用,那么执行计划也不会走你的索引,会采用全表扫描,因此需要对你where 条件里的添加索引,以使你查询走index道路,比全表扫描快点。
crazylaa 2010-09-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fangerhua 的回复:]

这个表有字段索引,但是不是reckoningdate 和datatype
[/Quote]

where里面用了reckoningdate 做条件,可以加个索引。 datatype如果数据不分散的话用不着加索引。
fangerhua 2010-09-29
  • 打赏
  • 举报
回复
这个表有字段索引,但是不是reckoningdate 和datatype
crazylaa 2010-09-29
  • 打赏
  • 举报
回复
在reckoningdate 列上建索引。
count(*)改成count(1)
minitoy 2010-09-29
  • 打赏
  • 举报
回复
如果条件里能利用上索引的话,通过索引扫描就可以获得条数,一般来说比全表扫描要有效率.
ngx20080110 2010-09-29
  • 打赏
  • 举报
回复
沒有索引,count就會全表掃描,加個索引列吧
fangerhua 2010-09-29
  • 打赏
  • 举报
回复
哪个字段有索引?比如说A,b,c字段?怎么了,能解决?
gelyon 2010-09-29
  • 打赏
  • 举报
回复
对你reckoningdate和datatype 字段加个index
另外,建议用count(1)代替count(*)
minitoy 2010-09-29
  • 打赏
  • 举报
回复
哪个字段有索引?
gaozhen4160 2010-09-29
  • 打赏
  • 举报
回复
我也在考虑这个问题

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧