技术原理
在查询大宽表时,若对少数列通过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加速宽表查询功能。操作步骤如下:
-
连接PolarDB数据库。具体操作步骤请参见连接数据库集群。
-
将参数
imci_enable_hybrid_plan的值设置为ON,来开启Hybrid Plan加速宽表查询功能。SET imci_enable_hybrid_plan=ON; -
在需要使用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)




