【发布时间】:2018-10-10 19:12:00
【问题描述】:
我需要一些关于如何对整数列执行自动分区的帮助,类似于我们在日期列上执行的操作,例如 PARTITION BY RANGE (DIM_DT_ID) INTERVAL (NUMTODSINTERVAL(1,'DAY'))。
我有 9000 万行,性能很差,我们的查询 SLA 是 2 秒,我想执行分区。什么是最好的方法以及如何在整数列上启用自动分区
我们的查询将始终按这些列过滤,例如
select * from <tbname>
where ObjectID =1346785
and patentnumber=23456.
【问题讨论】:
-
我确定你没有 9000 万个 表 - 你可能是指一个表,有那么多 行。您缺乏对细节的关注(关于您在此处发布的问题,寻求帮助)不是一个好兆头。然后:您想在 MORE THAN 一个列上进行分区?您在问题的末尾显示两列。这两列的值范围是多少? (如您所示,典型值很有帮助,但您需要提供更多信息才能获得有意义的答案。)
-
抱歉进行了必要的更改..ObjectID 范围是 1 到 4010,并且专利号是一种代理键
-
好的,那么按 ObjectID 分区应该不成问题,但按专利号分区可能会。专利号值是如何产生的?另请注意,如果 ObjectID 范围为 1 到 4010,则在您的帖子中演示通过
ObjectID=1346785进行过滤是没有意义的。 -
Mathguy..我只是在这里做一个例子,因为为了合法性我不能粘贴原始查询..
-
@sunnybabau 该查询看起来从多列索引中受益比分区更多。分区通常最适合必须返回或处理大量数据的操作,而索引最适合返回或处理少量数据的操作。 ObjectID 的大范围,加上专利号是“一种代理键”意味着查询将只返回少量行。
标签: oracle performance oracle12c