MySQL Using intersect的交集算法描述

2020-09-09 11:13   来源: 互联网

        在一次优化过程中,MySQL执行计划从三个辅助索引中选择两个,并通过UsingIntersectAlgorithm进行索引合并操作。实际上,Intersecect意味着交集。虽然对性能没有什么影响,但令人好奇的是MySQL知识系统在理解上没有交集语法。

        

        在集合论中,设A,B为两组,由集a和集B的所有元素组成,称为集a和集B的交(交)集,记为A≤B。

        

        MySQL没有诸如Intersec这样的语法,但是EXPLAIN使用了索引交集的算法。

        

        1)EXPALAIN案:

        

        进行以下查询:

        

        当使用INTERSECT:表示使用AND的单个索引的条件时,此信息指示从处理结果中获得交集

        

        2)通过官方谅解:

        

        使用INTERSECT是索引合并访问方法。在解释输出的附加字段中通常会显示几种算法:

        

        使用相交(.)

        

        使用联合(.)

        

        Using排序_UNION(.)

        

        索引合并交集算法对所有使用的索引执行同步扫描,并生成从合并索引扫描中接收的行序列的交集。

        

        3)关闭优化器行为索引_Merge_交集以实现单独的索引:

        

        人们怀疑这种表现会更好,下面是通过概要分析进行的比较:

        

        其中,执行时间没有使用索引交叉方法来更好地执行。因为索引合并模式执行了两次基础IO访问,导致执行时间较长。

        

        摘要

        

        不建议关闭优化器index_merge_交参数,因为只要数据驻留在内存中,它对性能的影响就很小,因此,当有足够的内存分配给nudbBufferpool时,保留默认值

        

        但是,对于某些特定的SQL语句情况,需要交叉优化器选项。

        

        在测试过程中,我们发现无论条件语句中有多少个索引,相交只选择了两个索引

        

        与上述情况一样,建议采用联合指数法。

        

        通过对IntersectAnalysis的分析,MySQL可以完全实现对Intersect语法的支持,希望本节将被添加到后续版本8.0中。

责任编辑:fafa
分享到:
0
【慎重声明】凡本站未注明来源为"中国财经导报"的所有作品,均转载、编译或摘编自其它媒体,转载、编译或摘编的目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如因作品内容、版权和其他问题需要同本网联系的,请在30日内进行!