当前位置: 首页 > Web前端 > HTML

Web前端实训-MySQL索引下推分析

时间:2023-03-28 11:21:32 HTML

以下文章来自素人草,小编是素人草本题什么是IndexConditionPushdownICP?指数下推的过程是怎样的?什么情况下可以使用索引下推,索引下推有什么限制?如何启用或禁用索引下推优化?IndexConditionPushdown(ICP)当MySQL使用索引检索表中的行时,ICP可以作为一种优化方案。当不使用ICP时,存储引擎通过索引检索底层表中的行,将满足WHERE条件的行返回给客户端。启用ICP后,如果只需要通过索引中的列来评估该行是否满足WHERE中的某些条件,MySQL会将这部分WHERE条件推送给存储引擎,然后存储引擎对推送的内容进行评估-down索引使用索引条目条件,只从表中读取满足条件的行。ICP可以减少存储引擎访问底层表的次数和MySQL访问存储引擎的次数_前端训练。ICP适用场景ICP可用于range、ref、eq_ref、ref_or_null等需要访问整表行的访问方式。ICP可以与InnoDB和MyISAM一起使用,包括分区表。ICP限制对于InnoDB表,ICP仅适用于二级索引。因为ICP的目标是通过减少全表读次数来减少I/O操作。对于InnoDB聚簇索引,完整的记录已经被读入InnoDB缓冲区,在这种情况下无法使用ICP减少I/OICP不支持在虚拟生成列上创建索引。InnoDB存储引擎支持在虚拟生成列上创建索引。不能下推与子查询相关的条件。不能下推与存储函数相关的条件。触发条件无法下推ICP优化过程要了解ICP优化的工作原理,首先考虑在没有索引下推的情况下索引扫描如何工作:要获取下一行,首先读取索引元组,然后传递索引元组检索并读取整行数据的。测试表中数据是否满足WHERE条件。当根据测试结果接收或拒绝行并使用索引下推时,扫描过程如下:获取下一行的索引元组(不需要获取整行数据)测试是否只能通过索引该行确认数据是否满足部分WHERE条件。如果不满足条件,则继续获取下一个索引元组。如果满足条件,则通过对元组建立索引来检索并读取整行数据,以测试数据是否满足其余的WHERE条件。根据测试结果接受或拒绝行。ICP的EXPLIAN输出在Extra列中显示Usingindexcondition。示例假设有一个包含人员和地址数据的表,表上有一个索引INDEX(zipcode,lastname,firstname)。如果我们知道一个人的邮政编码值但不确定他的名字,我们可以使用以下查询:SELECT*FROMpeopleWHEREzipcode='95054'ANDlastnameLIKE'%etrunia%'ANDaddressLIKE'%MainStreet%';MySQL可以使用索引来检索zipcode='95054'的人。第二部分不能用于限制必须扫描的行数(lastnameLIKE'%etrunia%'因为LIKE条件以%开头),当不使用索引下推时,此查询必须检索所有整行数据zipcode='95054'使用索引下推,MySQL在读取整行数据之前检查lastnameLIKE'%etrunia%'。这样就不需要读取满足zipcode条件但不满足lastname条件的行数据。控制ICP是否开启,可以通过iptimizer_switch变量的index_condition_pushdown标志来控制ICP是否开启。SEToptimizer_switch='index_condition_pushdown=off';SEToptimizer_switch='index_condition_pushdown=on';问题的答案什么是索引条件下推(ICP)?指数下推的过程是怎样的?索引下推是指在查询时,先只读取索引元组(而不是整行数据),利用索引元组判断数据是否满足WHERE语句中的条件,只有符合条件的才读取整行行。行数据判断其他WHERE条件。“过程”:读取索引元组,根据索引元组判断该行是否满足WHERE中的其他条件(索引中其他列的条件部分)。如果没有,www.atguigu.com直接读取下一个索引Tuple,不读取这一行的数据。如果满足条件,通过索引tuple_web前端训练,检索并读取整行数据,判断数据是否满足WHERE中的其他条件(其他列不在索引中的条件)。什么情况下可以使用索引下推,索引下推有什么限制?ICP可用于MyISAM和InnoDB表,包括分区表。对于InnoDB表,ICP仅适用于二级索引。ICP可用于range、ref、eq_ref、ref_or_not类型的查询。“限制”:不适用于在虚拟生成列上创建的索引。不适用于与子查询/存储函数/触发条件相关的条件如何检查语句是否使用索引下推?查看EXPLAIN的Extra列是否显示Usingindexcondition如何开启或关闭索引下推优化?禁用:SEToptimizer_switch='index_condition_pushdown=off';启用:SEToptimizer_switch='index_condition_pushdown=on';