什么是Oracle中的偏斜列

时间:2016-02-19 16:16:40

标签: oracle oracle11g oracle10g oracle-sqldeveloper

我发现了我的查询的一些瓶颈,它只从单个表中选择数据然后需要时间,我在两列上使用了非唯一键索引,并在where子句中使用了列。


select name ,isComplete from Student where year='2015' and isComplete='F'

现在我发现了一些来自互联网的概念,比如偏斜的列,那又是什么呢?
有一个想法然后PLZ帮助我? 以及如何解决偏斜柱的问题?
以及偏斜列如何影响Query的性能?

2 个答案:

答案 0 :(得分:3)

倾斜列是列中数据不均匀分布的列。

例如,假设:

  • 您有一张表order_lines,包含100,000,000行
  • 该表格有一个名为customer_id
  • 的列
  • 您有1,000,000个不同的客户
  • 一些(非常大的)客户可以拥有数十万或数百万的订单行。

在上面的例子中,order_lines.customer_id中的数据是偏斜的。平均而言,您希望每个不同的customer_id都有100个订单行(1亿行除以100万个不同的客户)。但是一些大客户拥有许多,超过100个订单线。

这会影响性能,因为Oracle的执行计划基于统计数据。因此,从统计学上讲,Oracle认为它可以基于order_lines上的非唯一索引访问customer_id并且只返回100条记录,然后它可能会加入到另一个表或任何使用{{1操作。

但是,当它实际为特定客户获得1,000,000个订单行时,索引访问和嵌套循环连接速度非常慢。对于Oracle来说,对另一个表执行全表扫描和散列连接会好得多。

因此,当数据存在偏差时,最佳访问计划取决于您选择的特定客户!

Oracle可以通过选择性地收集"直方图"来避免这个问题。在列上,因此Oracle知道哪些值有很多行,哪些只有少数几行。这为Oracle优化器提供了在大多数情况下生成最佳计划所需的信息。

答案 1 :(得分:-1)

全表扫描和索引扫描都取决于Skewed列。 和倾斜的专栏只不过是你的传播像性别列包含60名男性和40名女性。