暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Hybrid Plan加速宽表查询

芬芳 2023-11-17
205

技术原理


image.png

在查询大宽表时,若对少数列通过WHERE或JOIN条件进行过滤,或查询TOP K,最后输出筛选出来的行的所有详细信息。对于这类查询,使用列存索引进行查询的效果较好。但在使用列存索引查询筛选出的列的详细信息时,project需要获取所有的列信息,列存索引在获取所有的列信息时存在读放大问题。这种情况下,通过行式索引来查询详细信息效果较好。这种在同一条查询语句中既使用了列式索引,又使用了行式索引的查询方式称之为Hybrid Plan

Hybrid Plan会加快宽表查询速度,对于执行计划中适合列式索引的部分,会通过列存索引来执行并获取中间结果,中间结果中仅包含主键信息。最后再通过主键结合InnoDB主索引来查询project中所有的列信息并输出。原理如上图所示。

适用场景

宽表查询,且查询结果中会输出多列(15列以上)的场景。

前提条件

集群的产品版本需为企业版,集群版本需为PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.37及以上。

使用限制

  • 查询语句中需要输出的列涉及的表中需要有显式定义的主键。

  • 暂不支持对分区表使用Hybrid Plan加速宽表查询功能。

  • 暂不支持对输出JSON、GIS、BLOB、ENUM和SET类型的列的查询语句使用Hybrid Plan加速宽表查询功能。

  • 暂不支持对输出的列为聚合表达式(如SUM、AVG等)计算后的结果的查询语句使用Hybrid Plan加速宽表查询功能。

如果慢SQL中需要使用Hybrid Plan加速宽表查询功能,但受限于表类型、列类型以及表达式等因素,您可以联系我们寻求帮助。

参数说明

您需要在数据库中将imci_enable_hybrid_plan参数的值设置为ON来开启Hybrid Plan加速宽表查询功能,并在查询语句中的HINT语法中将参数imci_force_hybrid_index_search的值设置为ON来加速查询。

参数名称

参数说明

imci_enable_hybrid_plan

Hybrid Plan加速宽表查询功能的控制开关。取值范围如下:

  • ON(默认):开启Hybrid Plan加速宽表查询功能。

  • OFF:关闭Hybrid Plan加速宽表查询功能。

imci_force_hybrid_index_search

是否在满足条件的查询语句中使用Hybrid Plan加速宽表查询。取值范围如下:

  • OFF(默认):不在满足条件的查询语句中使用Hybrid Plan加速宽表查询。

  • ON:在满足条件的查询语句中使用Hybrid Plan加速宽表查询。

使用说明

此处以SELECT * FROM t1;为例来介绍如何使用Hybrid Plan加速宽表查询功能。操作步骤如下:

  1. 连接PolarDB数据库。具体操作步骤请参见连接数据库集群

  2. 将参数imci_enable_hybrid_plan的值设置为ON,来开启Hybrid Plan加速宽表查询功能。

    SET imci_enable_hybrid_plan=ON;
    
  3. 在需要使用Hybrid Plan加速宽表查询功能的SQL语句中添加HINT语法,并将HINT语法中参数imci_force_hybrid_index_search的值设置为ON

    SELECT /*+ SET_VAR(imci_force_hybrid_index_search=ON) */ * FROM t1;
    

    您可以通过EXPLAIN语句来判断在SQL语句中使用的Hybrid Plan加速宽表查询功能是否生效。如果执行计划中包含HybridIndexSearch,则表示Hybrid Plan加速宽表查询功能生效。

    EXPLAIN SELECT /*+ SET_VAR(imci_force_hybrid_index_search=ON) */ * FROM t1;
    

    查询结果如下:

    +----+-------------------------+------+---------------------------------------------------------------+
    | ID | Operator                | Name | Extra Info                                                    |
    +----+-------------------------+------+---------------------------------------------------------------+
    |  1 | Select Statement        |      | IMCI Execution Plan (max_dop = 32, max_query_mem = unlimited) |
    |  2 | └─HybridIndexSearch     |      | Used table: t1                                                |
    |  3 |   └─Compute Scalar      |      |                                                               |
    |  4 |     └─Table Scan        | t1   |                                                               |
    +----+-------------------------+------+---------------------------------------------------------------+
    4 rows in set (0.02 sec)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论