我发现了我的查询的一些瓶颈,它只从单个表中选择数据然后需要时间,我在两列上使用了非唯一键索引,并在where子句中使用了列。
select name ,isComplete from Student where year='2015' and isComplete='F'
现在我发现了一些来自互联网的概念,比如偏斜的列,那又是什么呢?
有一个想法然后PLZ帮助我?
以及如何解决偏斜柱的问题?
以及偏斜列如何影响Query的性能?
答案 0 :(得分:3)
倾斜列是列中数据不均匀分布的列。
例如,假设:
order_lines
,包含100,000,000行customer_id
在上面的例子中,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名女性。