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



我有一个关于 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

我读了这篇关于 time 命令输出的文章,据我所知sys + user 时间应该与我的测量相关。添加sys + user时间没有变化,real也没有变化。

sys + 用户约为 44 毫秒,实际约为 1 毫秒。

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

免责声明:我应该在大学里做一个关于这个的演讲,所以从技术上讲这是家庭作业,但由于它更像是一个理解问题,而不是"请让我的代码工作",我希望在这里发布它是合适的。另外,我知道查询可以简化,但我的问题不是关于这个。

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

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

-我完成

'从客户 F1 中选择 f1.name其中 f1.nationkey = 22 并且存在 (

从 F2.orderkey=f3.orderkey 上的订单 F2 内部联接行项目 F3 中选择 *。其中 f1.custkey=f2.custkey 和 f3.receiptdate 介于 '1992-06-11' 和 '1992-07-11' 之间

)'

最新更新