注意:这是我所在大学的一个数据库系统入门课程,所以我不完全确定这是否重要,但对于值得我们学习的是MySQL。
我现在正在做的一个家庭作业问题是分析带有两个谓词的查询的一些查询计划,特别是:
SELECT *
FROM Student
WHERE wam > 75 AND faculty = 'Arts';但是,所提供的计划只假设在其中一个谓词上建立索引,例如(wam)上的非聚集B+树索引。
问题的一个例子是:
计算最佳计划的估计成本,假设非聚集的B+树索引(wam)是唯一可用的索引。假设有60个索引页。讨论和计算备选方案
我该如何计算这样一个计划的成本呢?我是否还需要计算非聚集/集群B+树和其他谓词的哈希索引的成本?我知道,另一个方案也只是一个完整的表格扫描。
“学生”有800页,64000元组。“教师”可以采取10个独特的价值观。"wam“可以有100个独特的值。
谢谢你,如果我还不够具体的话,可以自由地指出这篇文章中缺少的东西。
发布于 2019-05-17 17:55:21
该查询的最佳索引是INDEX(faculty, wam),按该顺序排列。
MySQL (在大多数情况下)不使用两个不同的索引。但是,它将使用“复合”索引,以便在某些情况下很好地使用,例如这种情况。
如果不知道有多少行有Arts,有多少行有> 75,您就无法准确地断定INDEX(wam)或INDEX(faculty)中哪个行更好。优化器也不能,因为它的统计收集不是很好。SHOW INDEXES和EXPLAIN SELECT提供了来自相同统计数据的数字,因此您不一定会得出最佳的结论。
"Hash“索引( InnoDB没有)本质上并不比BTree索引好。哈希索引对于一个范围(例如,> 75)是无用的。(因此,MySQL使用BTrees,不提供Hash索引。)
另一点:如果表中有wam > 75的比例超过一小部分,INDEX(wam)就会被回避;扫描整个表可能比索引的BTree和数据BTree之间的反弹更快。同样,> 75和60 pages以及10和100没有给出优化器应该走哪条道路的好线索。这个问题的答案是“视情况而定”或“信息不足”。
您可以通过提供两个答案来解决这个问题:一个是很少有行有wam > 75的,另一个是大多数符合谓词的。
您的老师是否有使用数据库的经验,或者仅仅使用教科书?
https://dba.stackexchange.com/questions/238419
复制相似问题