如何找到关系代数查询所需的磁盘访问次数?

时间:2015-01-07 19:15:27

标签: sql relational-database rel

你好,你们中任何一个能够在关系代数方面向我解释查询优化概念的人都很好吗?

我构建关系代数查询的首选方法是逐步使用临时值,但我可以找到的唯一资源用于解释查询优化如何工作以查找所需的磁盘访问量,这对于关系代数查询使用不同的表示法,困惑我。

所以,如果我得到以下关系:

部门( deptNo ,deptName,location)

员工( empNo ,empName,empAddress,jobDesc,deptNo *)

并生成了以下关系代数查询,以查找在曼彻斯特部门工作的所有程序员:

temp1 =部门加入员工

temp 2 = SELECT(jobdesc ='程序员')(temp1)

result = SELECT(location =' Manchester)(temp 2)

我可以假设员工关系中有10,00个元组,部门关系中有50个元组,100个程序员(每个部门2个)和位于曼彻斯特的一个部门,我将如何计算出多少个磁盘访问需要吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

是的 - 戈登是对的。但是,这是一个学术练习:您正在构建数据集 - 假设子查询返回的每个元素/元组是一个磁盘访问。一般经验法则 - 尽早限制大量数据。让我们假设您首先执行JOIN(10000名员工+ 50个部门= 10050个磁盘条目{甚至认为返回的行数是10000!}),然后执行SELECT(假设子查询完全索引)=(100程序员+曼彻斯特的1个部门)因此“访问”的总数= 10050 + 101 = 10151。

如果先进行SELECTS,整个练习会发生显着变化:(临时1 =获取程序员= 100行/磁盘访问),(临时2 =获取部门= 1行/磁盘访问),加入(再次,假设完美)索引临时视图/查询等等)= 50行:因此“访问”总数= 100 + 1 + 50 = 151。

结果相同,但解释和执行的方式会影响数据库引擎必须执行的工作量。

这已经很多年了,我可能会犯这个错误 - 我不介意纠正。

相关问题