3

我无法理解等深度直方图在查询优化中的作用。有人可以给我一些好的资源的指点,或者任何人都可以解释一下。我已经阅读了一些研究论文,但我仍然无法说服我需要和使用等深直方图。那么,有人可以用一个例子来解释等深度直方图吗?

我们还可以合并直方图的桶,使直方图变得足够小并适合磁盘上的 1 页吗?

还有什么是等深度直方图中的桶边界?

4

1 回答 1

7

警告:我不是数据库内部的专家,所以这是一个笼统的答案,而不是一个具体的答案。

查询编译器将查询(通常在 SQL 中给出)转换为获取结果的计划。计划由对数据库引擎的低级“指令”组成:扫描表 T 以查找列 C 中的值 V;使用表 T 上的索引 X 来定位值 V;等等

查询优化是关于编译器决定一组(可能巨大的)替代查询计划中的哪一个具有最低成本。成本包括挂钟时间、IO 带宽、中间结果存储空间、CPU 时间等。从概念上讲,优化器正在搜索替代计划空间,评估每个计划空间的成本以指导搜索,最终选择它可以找到的最便宜的。

上面提到的成本取决于对将读取和/或写入多少记录、是否可以通过索引定位记录、将使用这些记录的哪些列以及数据大小和/或磁盘页数的估计他们占据。

这些数量又通常取决于存储在表中的确切数据值。例如考虑索引列select * from data where pay > 100在哪里。pay如果 pay 列没有超过 100 的值,则查询非常便宜。对索引的一次探测就可以回答它。相反,结果集可能包含整个表。

这就是直方图有帮助的地方。(等深直方图只是维护直方图的一种方法。)在前面的查询中,直方图将在 O(1) 时间内提供对查询将生成的行的分数的估计,而无需确切知道这些行将包含什么.

实际上,优化器正在对数据的抽象“执行”查询。直方图就是那个抽象。(其他可能。)直方图可用于估计查询计划操作的成本和结果大小:例如,在大量插入和删除期间连接结果大小和页面命中(这可能导致生成临时索引)。

对于一个简单的内连接示例,假设我们知道两个表的整数值连接列是如何分布的:

Bins (25% each)
Table A                    Table B
0-100                      151-300 
101-150                    301-500  
151-175                    601-700
176-300                    1001-1100

不难看出,表 A 的 50% 和表 B 的 25% 反映了可能的参与。如果这些是唯一值列,那么一个有用的连接大小估计是 max(.5 * |A|, .25 * |B|)。这是一个非常简单的例子。在许多(大多数?)情况下,分析需要更复杂的数学。对于连接,通常通过“连接”操作数的直方图来计算结果的估计直方图。这就是使文学如此多样化、复杂和有趣的原因。

博士论文通常以简洁的形式涵盖大量技术文献的调查,阅读起来并不难。(毕竟,候选人试图说服委员会他/她知道如何进行文献检索。) 是一个这样的例子。

于 2013-01-11T18:14:44.587 回答