从具有大量数据的表中获取计数

时间:2012-02-28 06:31:46

标签: sql oracle performance count

我试图从一张包含大约4000万条记录的表中获取记录数。我的查询如下:

Select count(*) from Employee 
            where code = '000111' and status = 'A' and rank = 'B'

大约有2-3百万条记录满足条件。状态只有2个值(A和C),秩也只有两个值(A和B)

已为列'代码','状态'和'排名'添加了索引,并且所有索引都是VARCHAR。

尽管如此,上述查询花费了大量时间。

有没有办法快速检索计数?

请注意,我只想要记录数。

编辑:列详细信息

EMPLOYEE

CODE.       NOT NULL VARCHAR2(6) 
STATUS      NOT NULL VARCHAR2(1) 
RANK        NOT NULL VARCHAR2(1) 

索引:

CODE_IDX - Normal Index (For Code)
STATUS_IDX - BITMAP Index (For Status)
TARIFF_IDX - Normal Index  (For Tariff)

2 个答案:

答案 0 :(得分:1)

如果表不断更新并且您需要不断获取计数,我建议您创建一个键/值表(如果您还没有),将计数存储为数据库中的条目而不是而不是每次都得到计数。也就是说,如果你需要你的查询更快......那肯定会加快它的速度。将密钥保留在桌面上的主键上,您不必担心索引。通过向值中减去或添加1来插入或删除新条目时更新键/值对。然后通过以cron或其他方式进行计数,定期确保您的价值确定。

答案 1 :(得分:0)

你试过了吗?

Select count(1) from Employee where code = '000111' and status = 'A' and rank = 'B'