Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库中的等深度直方图示例?_Database - Fatal编程技术网

Database 数据库中的等深度直方图示例?

Database 数据库中的等深度直方图示例?,database,Database,我无法理解等深度直方图在查询优化中的作用。谁能给我一些好资源的建议,或者谁能解释一下。我读过几篇研究论文,但仍然无法说服我的同事使用等深度直方图。那么,有人能用一个例子来解释等深度直方图吗 我们还可以合并柱状图的存储桶,使柱状图变得足够小,并适合磁盘上的一页吗 还有,等深度直方图中的桶边界是什么?警告:我不是数据库内部结构方面的专家,所以这是一个一般的答案,而不是一个具体的答案 查询编译器将查询(通常用SQL表示)转换为获取结果的计划。计划由数据库引擎的低级“指令”组成:扫描表T,查找C列中的值

我无法理解等深度直方图在查询优化中的作用。谁能给我一些好资源的建议,或者谁能解释一下。我读过几篇研究论文,但仍然无法说服我的同事使用等深度直方图。那么,有人能用一个例子来解释等深度直方图吗

我们还可以合并柱状图的存储桶,使柱状图变得足够小,并适合磁盘上的一页吗


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

警告:我不是数据库内部结构方面的专家,所以这是一个一般的答案,而不是一个具体的答案

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

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

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

这些数量通常反过来取决于表中存储的确切数据值。从数据> > 100 < /代码>中考虑代码< >选择> >其中代码< >支付< /C> >是索引列。如果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 |)。这是一个非常简单的例子。在许多(大多数?)情况下,分析需要更复杂的数学知识。对于联接,通常通过“联接”操作数的直方图来计算结果的估计直方图。这就是为什么文学如此多样化、复杂和有趣的原因


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

对于这个问题,你可能没有有效的标签。您的问题与查询优化器的内部结构有关,数据库设计者通常将其视为黑盒。您现有的标签将吸引像我这样的数据库设计者的注意,但可能不会吸引写C++优化器的C程序员或C++程序员的注意。@ CATCALL:您的意思是说,编写一个优化器的程序员也在阅读?你会很惊讶谁会这样。但我想的更多的是大学生或开源贡献者,他们可能比我更了解这一点。回答得好。有趣的是,这个问题的答案是:“为什么是等深度直方图”,而不是简单的等宽度直方图?我的猜测是:当有许多不同的值时,等深度直方图更节省空间,因为箱子的数量是固定的,并且与不同值的数量无关。若并没有那个么多不同的值,等宽度将消耗更少的空间。@EugeneBeresovksy。Equidepth为数据结构提供了一种自然的方式,使其符合其所持有的数据结构。对于任何固定的空间量,它都提供了最佳的保真度。