【发布时间】: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