更新时间:2026-02-25 GMT+08:00
分享

并行查询简介

什么是并行查询

云数据库 TaurusDB支持了并行执行的查询方式,用以降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。

并行查询的基本实现原理是将查询任务进行切分并分发到多个CPU核上进行计算,充分利用CPU的多核计算资源来缩短查询时间。并行查询的性能提升倍数理论上与CPU的核数正相关,也就是说并行度越高能够使用的CPU核数就越多,性能提升的倍数也就越高。

下图是使用CPU多核资源并行计算一个表的count(*)过程的基本原理:表数据进行切块后分发给多个核进行并行计算,每个核计算部分数据得到一个中间count(*)结果,并在最后阶段将所有中间结果进行聚合得到最终结果。具体如下:

图1 并行查询原理图

应用场景

并行查询适用于大部分SELECT语句,例如大表查询、多表连接查询、计算量较大的查询。对于非常短的查询,效果不太显著。

  • 轻分析类业务

    报表查询通常SQL复杂而且比较耗费时间,通过并行查询可以加速单次查询效率。

  • 系统资源相对空闲

    并行查询会使用更多的系统资源,只有当系统的CPU较多、IO负载不高、内存够大的时候,才可以充分使用并行查询来提高资源利用率和查询效率。

  • 数据频繁查询

    针对数据密集型查询,通过并行查询,可以提高查询处理执行效率,减少网络流量和计算节点的压力。

支持的场景和受限场景

表1 并行查询支持的场景

功能场景

说明

扫描

支持全表扫描、索引扫描、索引范围扫描、索引逆序扫描、索引点查询、索引下推等。

查询

支持单表查询、多表JOIN、视图VIEW、子查询,部分CTE查询、非分区表查询、分区表单分区查询、UNION/UNION ALL查询等。

JOIN

支持BNL JOIN、BKA JOIN、HASH JOIN、NESTED LOOP JOIN、SEMI JOIN、ANTI JOIN、OUTER JOIN等。

子查询

支持条件子查询、SCALAR子查询、部分关联子查询、非关联子查询、DERIVED TABLE等。

数据类型

支持整型数据、字符型数据、浮点型数据、时间型数据等。

表达式运算

支持算术表达式计算(+、-、*、%、/、|、&),条件表达式运算(<、<=、>、>=、<>、BETWEEN/AND、IN等)。

逻辑运算

支持OR、AND、NOT等。

一般函数

支持字符函数、整型函数、时间函数等。

聚合函数

支持COUNT/SUM/AVG/MIN/MAX等。

注意:

对于含有COUNT聚合函数的SQL语句使用了InnoDB并行查询场景下,如果该SQL语句需要使用PQ,必须将“innodb_parallel_select_count”设置为off。

排序/分组/分页/过滤

支持排序ORDER BY、分组GROUP BY/DISTINCT、分页LIMIT/OFFSET、过滤WHERE/HAVING、列投影等。

EXPLAIN

包括传统EXPLAIN,以及MySQL 8.0新引入的EXPLAIN FORMAT=TREE、EXPLAIN ANALYZE、EXPLAIN FORMAT=JSON,其中2.0.60.241200版本开始支持EXPLAIN ANALYZE。

表2 并行查询受限场景说明

受限场景

说明

语句

  • 非查询语句(DML、DDL)。
  • PREPARE STATEMENT预处理语句。
  • 存储过程/函数/触发器中的 SELECT 语句。
  • 加锁查询,如SERIALIZABLE隔离级别,FOR UPDATE/SHARE LOCK。
  • 查询表为非INNODB表/系统表/显示临时表。
  • 不能转换成SEMIJOIN的子查询。
  • 不满足ONLY_FULL_GROUP_BY。
  • 递归查询(WITH RECURSIVE)。
  • 包含 WITH ROLLUP 子句。
  • 包含HIGH_PRIORITY/SQL_BUFFER_RESULT关键字。
  • 点查或者优化阶段返回0行数据,对应的执行计划显示:EQ_REF, Zero limit, Impossible WHERE, Impossible HAVING, No matching min/max row, Select tables optimized away, Impossible HAVING noticed after reading const tables, no matching row in const table。
  • 查询中包含 zerofill 的列,并且这些列能被优化为常量。

索引

  • 空间索引(SPATIAL INDEX)
  • 全文索引(Full Text)

函数

  • 窗口函数 (Window function)
  • JSON 相关函数 (JSON_ARRAYAGG, JSON_OBJECTAGG, JSON_VALUE, JSON_VALID, JSON_LENGTH 等)
  • 空间函数(GIS)(GeomCollection, GeometryCollection, LineString, MultiLineString, MultiPoint, MultiPolygon, Polygon 等)
  • 空间函数 (ST_GeomFromText, ST_AsText, ST_Distance, ST_Intersects, ST_Contains, ST_Buffer, ST_Area, ST_WITHIN 等)
  • 空间关系 (MBRContains, MBRCoveredBy, MBRCovers, MBRDisjoint, MBREquals, MBRIntersects, MBROverlaps, MBRTouches, MBRWithin 等)
  • user相关函数 (user, current_user, session_user, system_user, current_role 等)
  • XML 相关函数 (ExtractValue, UpdateXML)
  • 线程 ID 函数 (PS_CURRENT_THREAD_ID, PS_THREAD_ID)
  • 加密与哈希函数 (DES_DECRYPT, SHA, SHA1, SHA2, MD5, rand(不含参数的除外))
  • 锁与同步函数 (get_lock, is_free_lock, is_used_lock, release_lock, release_all_locks, sleep)
  • 返回值类型不支持的函数 (UNCOMPRESS, STATEMENT_DIGEST_TEXT)
  • 部分聚合函数 (BIT_AND, BIT_OR, BIT_XOR, GROUP_CONCAT, STD, STDDEV, STDDEV_POP, VARIANCE, VAR_POP, VAR_SAMP)
  • 其他系统函数 (set_user_var, WAIT_FOR_EXECUTED_GTID_SET, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS)
  • 用户自定义函数 (UDF)

并行查询与串行执行不兼容场景说明

相关文档