DB2 EXPLAIN 命令是不是包含 INSERT 语句的索引更新成本

Posted

技术标签:

【中文标题】DB2 EXPLAIN 命令是不是包含 INSERT 语句的索引更新成本【英文标题】:Does DB2 EXPLAIN command include cost of index update for INSERT statementsDB2 EXPLAIN 命令是否包含 INSERT 语句的索引更新成本 【发布时间】:2014-05-26 05:53:45 【问题描述】:

我们目前正在考虑改进我们对一组表的索引。我在 EXPLAIN 输出中看到的是当在表上创建适当的索引时某些 SELECT 查询的性能改进。但是我不知道 EXPLAIN 是否还包括在 INSERT(和 UPDATE)语句中产生的额外索引成本。

我创建了一个测试插入语句,但无论我在某个表上创建的索引如何,它都会显示相同的 timeron 成本。

感谢您的意见!

【问题讨论】:

【参考方案1】:

来自IBM manual。

EXPLAIN 数据包含有关 DB2 用于处理 SQL 语句的访问路径的信息。 EXPLAIN 数据的主要用途是调查语句中 SELECT 部分的访问路径。例如,EXPLAIN 表中的数据描述:

每次访问表时使用索引访问还是表空间扫描。 使用索引访问时,使用了多少个索引和索引列 使用哪些类型的 I/O 方法来读取数据页。 使用的连接方法和类型,以及 DB2 连接表的顺序。 DB2 何时以及为何对数据行进行排序。

对于 UPDATE 和 DELETE WHERE CURRENT OF,以及对于 INSERT,提供的信息要少一些。 EXPLAIN 数据没有描述所有或所有类型的访问。例如,对与基表分开存储的 LOB 值的访问,以及对强制引用约束所需的父表或从属表的访问,都不会显示在 EXPLAIN 表数据中。

您需要在测试 DB2 系统上进行试验,是否值得在 INSERTS、UPDATES 和 DELETES 中添加索引以帮助 SELECT 更好地执行。对于大多数 SELECTS 多于更改的系统,索引成本通常是值得的。

【讨论】:

我在测试数据库上尝试了我的 SELECT 和 INSERT 语句。当我更改表的索引时,SELECT 语句的估计时间成本确实发生了变化。然而,无论我在表上声明哪种索引,INSERT 语句的成本都保持不变。手册中的信息并未具体说明相关索引更改的成本是否包含在 INSERT 语句的估计成本中。对此有何其他指示? @markus:同样,对于 UPDATE 和 DELETE WHERE CURRENT OF,以及对于 INSERT,提供的信息要少一些。所以不,INSERT 解释没有帮助。只需在您的测试数据库上使用实际的 select 和 insert 语句运行实验。 好吧对不起我的评论。现在我明白了。感谢您的努力。

以上是关于DB2 EXPLAIN 命令是不是包含 INSERT 语句的索引更新成本的主要内容,如果未能解决你的问题,请参考以下文章

db2 常用命令

sql DB2 for zOS EXPLAIN情报抽出

EXPLAIN

在 unix 中找不到 db2 命令

DB2——表的append on属性

explain命令可能会修改MySQL数据