Sql 非结构化查询的性能优于群集查询、哈希群集查询和索引查询?
我使用以下查询作为一些非结构化数据(无索引、无群集等)的基线,并且与向联接列添加索引或向群集或哈希群集添加表相比,该查询在非结构化数据上的性能更好。我觉得我的基线查询并不理想,我的任务是进行基线查询并找到一个性能最好的结构,但我尝试过的所有结构的性能都比非结构化的差。我可以对基线查询做些什么,至少找到一种比非结构化查询有显著改进的结构 查询:Sql 非结构化查询的性能优于群集查询、哈希群集查询和索引查询?,sql,database,oracle,query-optimization,database-performance,Sql,Database,Oracle,Query Optimization,Database Performance,我使用以下查询作为一些非结构化数据(无索引、无群集等)的基线,并且与向联接列添加索引或向群集或哈希群集添加表相比,该查询在非结构化数据上的性能更好。我觉得我的基线查询并不理想,我的任务是进行基线查询并找到一个性能最好的结构,但我尝试过的所有结构的性能都比非结构化的差。我可以对基线查询做些什么,至少找到一种比非结构化查询有显著改进的结构 查询: SELECT Cust_name, price FROM Customer, Sales WHERE price > 1000 AND num_so
SELECT Cust_name, price
FROM Customer, Sales
WHERE price > 1000
AND num_sold > 10
AND Sales.Cust_id = Customer.Cust_id;
此查询返回150k行中的108k+行
以下是测试的痕迹:
非结构化:
在连接列Sales.Cust\u id和Customer.Cust\u id上添加索引:
将这两个表添加到集群索引为客户id的集群中:
将这两个表添加到具有10000个键的哈希群集:
您可以选择72%的数据。我认为任何结构都不会对这种情况有很大帮助。非结构化似乎是最好的。您选择了72%的数据。我认为任何结构都不会对这种情况有很大帮助。非结构化似乎是最好的。我能想到的唯一改进方法是:
我能想到的唯一改进方法是:
不要使用逗号语法,而是使用JOIN,例如:
选择客户名称,客户c的价格在s.Cust\u id=c.Cust\u id上加入销售,其中价格>1000,销售数量>10
运行这些查询时没有异常,以这种方式构造查询在性能上有什么不同吗?您是否尝试过使用parallel
提示执行查询?之后我会这样做,但我只是想看看什么结构最有效不要使用逗号语法,而是使用JOIN,如:选择客户名称,来自客户c的价格加入s.Cust_id=c.Cust_id上的销售,其中价格>1000,销售数量>10
运行这些查询时没有异常,以这种方式构造查询在性能上是否有任何差异?您是否尝试过使用parallel
提示执行查询?之后我会这样做,但我只是想看看哪种结构最有效?您能对查询提出任何改进建议吗?或者我可以用什么作为一个典型的基线查询来处理任何结构?不可能回答您的问题。这一切都取决于规格。如果您的用户总是选择70%的数据(您的基线?),那么您不需要任何结构。但是,如果您的用户通常会选择0.001%的数据,那么您可以定义一些有效的结构,等等。我的意思是,一般来说,我的基线查询的要点是获得一个初始读数,该读数应该非常慢(以便我以后可以看到改进)这样我就可以更改结构并应用相同的查询,并且应该至少有一个结构具有更好的性能。这个问题问我是否有更好的基线查询(即计数、获取单行、更多/更少筛选)可以使用,因为正如您在我当前的查询中看到的,所有结构都是WORSGET用户的典型查询。没人会猜到的。每个结构都适用于其他内容-没有针对evrything的解决方案:)如果存在一个适合evrything的结构,那么将只存在一个。您能建议对查询进行任何改进吗?或者我可以用什么作为一个典型的基线查询来处理任何结构?不可能回答您的问题。这一切都取决于规格。如果您的用户总是选择70%的数据(您的基线?),那么您不需要任何结构。但是,如果您的用户通常会选择0.001%的数据,那么您可以定义一些有效的结构,等等。我的意思是,一般来说,我的基线查询的要点是获得一个初始读数,该读数应该非常慢(以便我以后可以看到改进)这样我就可以更改结构并应用相同的查询,并且应该至少有一个结构具有更好的性能。这个问题问我是否有更好的基线查询(即计数、获取单行、更多/更少筛选)可以使用,因为正如您在我当前的查询中看到的,所有结构都是WORSGET用户的典型查询。没人会猜到的。每一个结构都适用于其他东西-没有任何解决方案适用于每一件事:)如果有一个结构适合每一件事,那么就只存在一个。