如果必须使用partition子句中未使用的列进行查询,是否应该使用oracle分区

如果必须使用partition子句中未使用的列进行查询,是否应该使用oracle分区,oracle,performance,partitioning,Oracle,Performance,Partitioning,我有一个包含2亿条记录的客户表。有三个客户来源(7000万、8000万和5000万条记录) 我在这张桌子上有三个问题 基于customerid和source获取客户详细信息的工具 第二步,根据源代码和帐户ID获取客户详细信息 第三,通过手机号码获取客户详细信息 我应该在这个表上使用列表分区吗?在这个表中,我按source分区?通过移动号码获取客户的查询在分区后会变慢。插入没有分区的记录需要很长时间 客户表中有以下列: customerid number(12), source varcha

我有一个包含2亿条记录的客户表。有三个客户来源(7000万、8000万和5000万条记录)

我在这张桌子上有三个问题

  • 基于
    customerid
    source
    获取客户详细信息的工具
  • 第二步,根据
    源代码
    帐户ID
    获取客户详细信息
  • 第三,通过手机号码获取客户详细信息
我应该在这个表上使用列表分区吗?在这个表中,我按
source
分区?通过移动号码获取客户的查询在分区后会变慢。插入没有分区的记录需要很长时间

客户表中有以下列:

customerid number(12), 
source varchar2(100), 
accountid number(12), 
mobile number(10). 

每个客户记录将具有不同的
客户ID
源代码
帐户ID
组合

在我看来,
这些列上没有分区+索引
是我的选择(有您提供的信息)


此外,“分区”意味着“很多钱”,因为您必须有企业版(EE),而分区(据我所知)是已经很昂贵的EE的一个附加组件。所以我不是说你(或你的公司)没有那么多钱,而是指出这可能会成为一个问题。

在我看来,
这些列上没有分区+索引将是我的选择(有你提供的信息)

此外,“分区”意味着“很多钱”,因为您必须有企业版(EE),而分区(据我所知)是已经很昂贵的EE的一个附加组件。所以我不是说你(或你的公司)没有那么多钱,而是指出这可能会成为一个问题

如果必须使用partition子句中未使用的列进行查询,是否应该使用oracle分区

可能不会。分区主要是一种管理工具,用于处理大量数据并保持其可用性。分区对性能的影响可以是负面的,也可以是正面的,特别是对于那些不在分区键上进行过滤的查询(就像您对手机号码的查询一样)

无论如何,我怀疑
源代码上的分区将大大提高任何查询的性能。它只是没有足够的选择性,分区修剪无法带来明显的好处

在这两种情况下,
(source,customerid)
(source,accountid)
上的复合索引与
压缩1
可能更有用。压缩索引的前导列是值得的,因为
source
是非选择性的。在
(移动)
(无压缩)上还有一个单列索引

顺便提一下,为什么
源代码
定义为varchar2(100)?这对于三价标识符来说似乎太长了。它应该是一个一个(或两个或三个)字符的代码(如果需要的话,有一个完整描述的查找表)。我认为这可能解释了为什么“插入没有分区的记录需要很长时间”。解决这个问题应该是你努力的重点

如果必须使用partition子句中未使用的列进行查询,是否应该使用oracle分区

可能不会。分区主要是一种管理工具,用于处理大量数据并保持其可用性。分区对性能的影响可以是负面的,也可以是正面的,特别是对于那些不在分区键上进行过滤的查询(就像您对手机号码的查询一样)

无论如何,我怀疑
源代码上的分区将大大提高任何查询的性能。它只是没有足够的选择性,分区修剪无法带来明显的好处

在这两种情况下,
(source,customerid)
(source,accountid)
上的复合索引与
压缩1
可能更有用。压缩索引的前导列是值得的,因为
source
是非选择性的。在
(移动)
(无压缩)上还有一个单列索引


顺便提一下,为什么
源代码
定义为varchar2(100)?这对于三价标识符来说似乎太长了。它应该是一个一个(或两个或三个)字符的代码(如果需要的话,有一个完整描述的查找表)。我认为这可能解释了为什么“插入没有分区的记录需要很长时间”。解决这一问题应该是您努力的重点。

在未来的参考中,请使用成千上万的数字,而不是10亿和10亿,因为后者在印度以外并不常见。在未来的参考中,请使用成千上万的数字,而不是10亿和10亿,因为后者在印度以外并不常见。