非结构化查询比集群,散列聚簇和索引更好吗?

时间:2015-09-29 04:11:14

标签: sql database oracle query-optimization database-performance

我使用以下查询作为一些非结构化数据(没有索引,没有集群等)的基线,并且查询在非结构化数据上的表现比我将索引添加到连接列或将表添加到a时更好集群或散列集群。我觉得我的基线查询并不理想,我的任务是采取基线查询并找到一个表现最好的结构,但我尝试过的所有结构都比非结构化更差。我能对基线查询做些什么,至少会找到一个比非结构化有明显改进的结构吗?

查询:

SELECT Cust_name, price
FROM Customer, Sales
WHERE price > 1000
AND num_sold > 10
AND Sales.Cust_id = Customer.Cust_id;

此查询从150k中返回108k +行。

以下是测试中的痕迹:

非结构化: enter image description here

在连接列Sales.Cust_id和Customer.Cust_id上添加索引: enter image description here

将两个表添加到集群索引为Cust_id的集群中: enter image description here

将两个表添加到具有10000个键的哈希集群中:

enter image description here

2 个答案:

答案 0 :(得分:4)

您选择了72%的数据。我认为任何结构都不会对这种情况有很大帮助。非结构化似乎是最好的。

答案 1 :(得分:0)

我能想到的唯一改进方法是:

  1. 使用price,num_sold或两者对销售表进行范围分区。
  2. 使用物化视图预加入表,和/或限制所需的列,和/或限制所需的行。
  3. 在销售表上使用压缩形式(如果您使用直接路径批量插入销售,这可能很有用。)
  4. 也许在您使用的销售表的列上尝试压缩索引,并且可能在客户(cust_id,cust_name)上使用索引,并希望快速完整索引扫描。