互联网上的许多相关文章将被称为索引下的推送优化。我认为在索引条件下推动优化更为合适,因为该优化技术的关键操作是将与MySQL Server索引相关的条件向下传递。到达存储引擎,IO时间的数量减少了。到存储引擎的服务器是向下的,并且传递了与索引有关的查询条件,因此在索引条件下更容易理解优化。
由于它是优化的,我们必须了解我们必须了解如何工作的内容,因此将其分为两个部分来描述工作过程。
在索引条件下推动优化以获取下一行时,请勿使用查询过程。首先读取索引信息,然后根据索引读取整个行数据。获取下一行的索引信息。检查索引中存储的信息是否符合索引条件。使用剩余的判断条件来确定该行的数据是否满足要求并满足返回数据的要求。为了进行分析,如果使用索引条件,额外将显示使用索引条件。它不使用索引,因为不确定在索引条件下在查询中推动的数据是满足要求的数据。还需要通过其他查询条件来判断它。
图1:请勿使用ICP技术(该过程使用数字符号,例如①②③等)
过程说明:
①:发送订单以读取数据。这是执行程序中的以下代码段。通过功能指针和手柄接口调用索引读数或完整的存储引擎读取。索引读数在此处进行。
②,③:输入存储引擎,读取索引树,在索引树上找到它,然后从表记录(步骤④,通常IO)读取条件(搜索后,红色满意度),从存储引擎返回从存储引擎返回到存储引擎。
在这里,您不仅必须在索引行中执行索引(通常在内存,快速速度。步骤③),还必须执行步骤④,通常是IO。
⑥:回到从存储引擎中找到的多个元中的组,在⑦中获取更多元组。
⑦-⑧:⑧根据条件的条件获得了满足条件的元组的条件。注意,该层在过滤之前会变得更加多样化。最后,少数符合条件的数量。
图2:使用ICP技术(该过程使用数字符号,例如①②③等)流程说明:①:发布读取数据的过程,该过程与第一个数字相同。
②,③:输入存储引擎,阅读索引树,在索引树上找到它,然后读取已推下的条件(搜索后,红色满意度)。返回存储引擎的⑤识别结果。
在这里,您不仅必须在索引行中执行索引(通常在内存,快速速度。步骤③),而且还必须根据推送条件进行判断。索引树中间的数据直接判断在索引树上,直到满足条件才能执行步骤。这样,与ICP方法相比,IO的量减少。
⑥:返回从存储引擎发现的少量数量,并在⑦中获得少量的元组。因此,ICP的比较不是ICP,并且返回该层的返回是少量的,合格的元 -补充说,图中的组件层次结构级别将不再解释。
示例假设有一个人表,包括字段名称,地址,first_name
索引是(名称,地址,first_name)
然后我们执行以下查询
如果您不使用索引条件来推动优化,则MySQL只能根据索引查询所有名称= 1的行,然后比较它是否满足整个条件的顺序。
在索引条件下推动优化技术后,索引中存储的数据可以确定与当前索引相对应的当前数据是否满足条件。只有合格的数据才能查询整个数据行。当查看执行计划时,您会发现额外的列中有信息,这表明索引被按下。
默认情况下打开索引下的优化。您可以通过下面的脚本控制开关
索引下的推送优化技术实际上使用索引中的数据,并在查询整个行数据之前尝试过滤无效的数据。
由于需要存储引擎来判断索引中的数据和条件,因此该技术基于存储引擎,并且只能使用特定的引擎。判断条件需要在存储引擎级别进行操作。例如,由于存储引擎未调用存储过程,因此无法调用存储过程的条件。