论文"真的,查询优化器有多好?“指出,基数是在关系数据库管理系统中找到更好的查询执行计划的最大影响因素。本文的总结可以找到这里。然而,其他员额解释了基数性和选择性之间的差异,指出选择性更为重要。
示例:
从国家=‘加拿大’的门票中选择最大值(价格);让我们假设我们有一个表: 180排的票。根据上述示例,国家=“加拿大”的表中有10行。查询只返回一行,即最大值(价格)。选择性=?基数=?选择性=访问的行数/行总数= 10/180 = 0.05 (访问的行数为5%)基数=访问的行数= 10
我的观点是,只有在有基数的情况下才能找到选择性,因此基数仍然是找到最佳查询执行计划的更重要的事情。你认为如何?请你详细解释一下你的理解好吗?谢谢
发布于 2019-01-19 16:27:07
因为其中一项是另一项的功能,所以它们同样重要。
各种DBMSes的实现细节不同,但通常收集表和索引统计信息的过程计算关键列的基数,并将这些值存储在保存统计信息的地方,通常是一些目录表。
例如,除了完整的表基数(在表tickets的示例中为180个)之外,它还可以收集和存储某些列的基数(即不同值的数量)。这允许优化器估计这些列的选择性,将列基数除以表基数。
许多DBMSes还维护键列的直方图,即这些列中特定值的基数。在您的示例中,除了其他统计数据外,引擎还可以存储以下事实:country列中有10行带有“Canada”,有18行带有“USA”,有8行带有“巴西”等等。
类似地,索引的统计信息不仅包含(潜在的)非唯一键值的总数,而且还包含整个键的不同键值的数量,通常还包含每个“子键”*的不同键值,从而允许优化器在需要时计算选择性。
*例如,对于包含A、B和C列的非唯一索引,引擎将存储完整的索引基数(等于表基数),以及(A, B, C)、(A, B)和(A)组合的不同计数。
https://dba.stackexchange.com/questions/227553
复制相似问题