优化DB2查询 - 为什么bash" time"输出保持不变?

时间:2016-07-10 17:45:14

标签: bash db2

我在TPC-H模式上有一个DB2查询,我试图用索引进行优化。我可以从db2expln输出中看出,当索引可用时,估计成本显着降低(300%)。 但是,我也试图测量执行时间,并且在使用索引执行查询时它不会发生显着变化。

我在SSH终端工作,执行查询并将输出写入

等文件
(time db2 "SELECT Q.name FROM 
(SELECT custkey, name FROM customer WHERE nationkey = 22) Q WHERE Q.custkey IN 
(SELECT custkey FROM orders B WHERE B.orderkey IN 
(SELECT orderkey FROM lineitem WHERE receiptdate BETWEEN '1992-06-11' AND '1992-07-11'))") &> output.txt 

我分别进行了10次测量:1)没有索引,2)在lineitem.receiptdate上有索引,3)在lineitem.receiptdate和customer.nationkey上有索引, 计算出的平均时间和标准差均在同一范围内。 我在索引创建后执行了RUNSTATS ON TABLE schemaname.tablename AND DETAILED INDEXES ALL

我在this上发布了关于time命令输出的帖子,据我所知sys + user时间与我的测量值相关。添加sys + user时间没有变化,而不是real

sys + user大约是44毫秒,真实大约是1秒。

任何提示为什么我看不到时间的变化?我是否解释time输出错误? db2expln中的优化程序估算是误导性的吗?

免责声明:我应该在大学做一个关于这个的介绍,所以它是技术上的功课,但是因为它更像是一个理解问题,而不是"请让我的代码工作"我希望在这里发布它是合适的。此外,我知道查询可以简化,但我的问题不是这个。

2 个答案:

答案 0 :(得分:1)

优化器估计计时器(内部成本的测量),并且这些计时器不能一对一地转换为查询执行时间。因此,计时器中300%的差异并不意味着您将在运行时看到300%的差异。

测量一个或多个SQL语句的时间我建议将db2batch

选项一起使用
  

-i complete

答案 1 :(得分:-1)

`SELECT f1.name FROM customer f1 在哪里f1.nationkey = 22并且存在(

从f2.orderkey = f3.orderkey上的订单f2内部联接lineitem f3中选择* 其中f1.custkey = f2.custkey和f3.receiptdate BETWEEN' 1992-06-11' AND' 1992-07-11'

)`