【问题标题】:Counts over a large set of records in DB对数据库中的大量记录进行计数
【发布时间】:2013-05-16 02:48:28
【问题描述】:

我有一张桌子 [ID,ITEM_NAME,ITEM_PRICE,ITEM_STATUS,ITEM_TYPE,ITEM_OWNER,ITEM_DATE]

应用程序可以使用任意数量的搜索条件查询表,例如项目日期和/或项目所有者等。

在结果集中,我还需要在 ITEM_STATUS 中按不同状态获取计数。

当我尝试根据状态获取计数时,它通常会导致超时。

这种情况在大容量应用程序中通常如何处理。说 Y 邮件。我计算了收件箱中有多少,有多少已读/未发送/发送,还有什么没有……几乎是立即的。怎样才能获得这样的体验?

【问题讨论】:

  • 您可以尝试在各个列 + ID 上添加索引,如 (ITEM_STATUS, ID)、(ITEM_NAME, ID) 等。我建议将 ID 列添加到索引中,因为我没有不知道特定列可能存在多少不同的值,并且在具有很少不同值的列上的索引可能会导致 DELETE 运行缓慢。分享和享受。
  • @BobJarvis 它不会影响插入吗?他们会出现太慢了
  • 我认为这不会导致任何性能问题。我有搜索表,其中表中的每一列(大约 40 或 50 列,如果我没记错的话)每个都有一个单独的索引。性能很好。 (我们构建了一个精心设计的系统来在后台更新搜索表,然后在我们发现不需要时将其丢弃)。在每天使用关系数据库的 20 多年中,我不记得索引在 INSERT 或任何其他操作上导致性能问题的情况,所以我不建议担心这一点。分享和享受。
  • +1 Bob -- 当担心“索引过多会降低插入速度”时,请记住插入发生一次,查询可能发生数千次。

标签: database oracle count scalability large-data-volumes


【解决方案1】:

除了索引之外,位图索引对于这类事情是最灵活和最高效的,如果您可以处理维护它们的并发问题,请考虑物化视图以涵盖最常见的聚合级别。

定义多级物化视图可以为您提供几乎即时的响应时间,甚至允许对 HAVING 子句进行有效索引。

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多