我原先在数据库的过程中使用了:
SELECT COUNT (*)
INTO icountnumber
FROM Recordmaster
WHERE (reckoningdate >= istartdate AND reckoningdate < ienddate)
AND (datatype = '01')
但是当数据量越来越大的时候,使用
COUNT (*)就不行了,全表扫描太受不了了;
如果在程序中,我可以用Query控件的Count来得到记录的行数,但是在Oracle的过程里怎么写才能得到icountnumber值,不用SELECT COUNT (*)的方式?
SELECT COUNT (*)
INTO icountnumber
FROM Recordmaster
WHERE (reckoningdate >= istartdate AND reckoningdate < ienddate)
AND (datatype = '01')
但是当数据量越来越大的时候,使用
COUNT (*)就不行了,全表扫描太受不了了;
如果在程序中,我可以用Query控件的Count来得到记录的行数,但是在Oracle的过程里怎么写才能得到icountnumber值,不用SELECT COUNT (*)的方式?
另外,建议用count(1)代替count(*)
count(*)改成count(1)
where里面用了reckoningdate 做条件,可以加个索引。 datatype如果数据不分散的话用不着加索引。
reckoningdate字段,则要考虑你常用查询指定的时间范围大不大。如果这个时间范围比较小,对应的数据占总数的比例小的话,加上索引。索引多了对插入有影响。要在插入、更新和查询之间取得一个平衡。