无法理解 DBMS 查询 I/O 成本计算

Posted

技术标签:

【中文标题】无法理解 DBMS 查询 I/O 成本计算【英文标题】:Having trouble understanding DBMS Query I/O cost calculation 【发布时间】:2017-06-01 18:12:17 【问题描述】:

谁能解释一下他们是如何计算出两个查询中的总 IO 成本的?

【问题讨论】:

您想知道他们是如何从the execution plan 获取数据的,还是SQL server 本身是如何计算该值的? 执行计划中的数据。就像他们如何计算每个 IO 成本一样。 SQL Server 会在您运行执行计划时为您计算成本。创建图像的人只是放了一张漂亮的照片。您是否尝试过使用执行计划选项运行查询?用眼睛看会更清楚。 你说的是哪个 DBMS? oracle 上常用的 SQL。 【参考方案1】:

我会试一试的。

I\O Cost 来自您当前必须处理的任何行数。

A计划

select 是所有产品和所有供应商。那是您必须处理的 7300 行。但是这个例子也将join 这意味着每个供应商将拥有所有产品,所以它@98​​7654324@s 300 * 7000 = 2100000。

然后您必须处理 2100000 行来启动您的供应商代码过滤器。

然后您必须处理 7000 行来启动您的状态过滤器,因为您之前已过滤到您的初始产品列表。

B 计划: 有一个错字,IN() 没有右括号。

您的IN 首先是您的查询,因为您的查询需要该数据集才能完成。您知道您有 300 个供应商,因此您正在对 300 个供应商进行工作以将其过滤到 10 个。

然后您 select 您的所有产品和所有佛罗里达供应商,因此您正在处理 7010 行、7000 种产品、10 个供应商(来自上一步),以便您可以执行 join,它为每个供应商提供供应商 7000 种产品。

10 * 7000 表示您现在使用 70000 行对 v_code 执行最终过滤。

总 I\O 成本是每个处理步骤的总和。

我希望这是有道理的。

【讨论】:

感谢您的帮助。我明白你在说什么,直到我们得到 7010 IO 成本。你能详细说明那部分吗?泰 感谢家人,我很感激。

以上是关于无法理解 DBMS 查询 I/O 成本计算的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库的基本理论

(计算机组成原理)第七章输入和输出系统-第四节1:I/O方式之程序查询方式

理解MySQL——索引与优化

理解MySQL——索引与优化

理解MySQL——索引与优化(转)

深入理解计算机系统