我试图从包含数百万条目的表中获取计数。我的查询看起来有点像这样:
Select count(*)
from Users
where status = 'A' and office_id = '000111' and user_type = 'C'
状态可以是 A 或 C,用户类型可以是 C 或 R。 Status、Office_id 和 User_type 是字符串
结果大约有 1000 万行,并且需要很长时间。我只想要总数。
如果有人能告诉我为什么要花这么多时间,以及解决方法(如果有),我将不胜感激。
如果需要更多详细信息,请告诉我。
数据库引擎是Oracle 11g
编辑:我为所有三个列添加了索引。仍然没有任何改善。还尝试了下面的查询,但它总是返回表中的总计数而不检查条件。
SELECT COUNT(office_id_key)
FROM Users
WHERE EXISTS (SELECT * FROM Users WHERE status = 'A' AND office_id = '000111' AND user_type = 'C')
最佳答案
为什么不简单地在表上的 age
和 place
创建索引,这样您的搜索速度将比简单地扫描整个表中的这些值更快。
CREATE INDEX age_index ON Employee(age);
CREATE INDEX place_index ON Employee(place);
这应该会加快该过程。
根据查询更改进行修改
CREATE INDEX status_index ON Users(status);
CREATE INDEX office_id_index ON Users(office_id);
CREATE INDEX user_type_index ON Users(user_type);
关于oracle - 从大表中获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400237/