文档中心MogDBMogDB StackUqbar
v5.0

文档:v5.0

支持的版本:

其他版本:

SQL Bypass

可获得性

本特性自MogDB 1.1.0版本开始引入。

特性简介

SQL Bypass是一种专为简化查询场景而设计的优化技术,旨在提高查询性能和效率。通过合理地优化查询逻辑、利用索引和缓存等手段,可以加快查询的执行速度,并减少不必要的计算开销。

客户价值

SQL Bypass是一种专为简单查询场景设计的优化技术,相对于传统的执行逻辑,SQL Bypass能够在基础场景下提升10%以上的性能。

举个例子,当数据量为20万条,执行等值查找操作时,SQL Bypass能够显著提升查询性能。实际的性能提升幅度可能因具体情况而有所不同,但通常在基础场景下能够达到或超过10%的提升。

而在PBE模式下,SQL Bypass的性能提升更为显著,可以达到20%以上的提升。例如,在20万条数据的情况下,执行即时查询操作,SQL Bypass能够进一步提升查询性能。

需要注意的是,这些性能提升取决于实际数据量、查询条件和具体的查询场景。但总体而言,SQL Bypass功能能够为系统的查询操作带来更高的性能和效率。

特性描述

在典型的OLTP(联机事务处理)场景中,简单查询通常占据了很大一部分的比例。这类查询的特点是只涉及单表和简单表达式的查询,不涉及复杂的联接、子查询和聚合操作等。为了加速这类简单查询的执行,5.0增强了SQL Bypass的功能。

SQL Bypass框架的主要思想是在解析(parse)阶段对这类简单查询做简单的模式判断,然后进入到特殊的执行路径中,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架。相反,SQL Bypass框架会直接重写一套简洁的执行路径,并直接调用存储接口来执行查询,从而大大加速简单查询的执行速度。

通过使用SQL Bypass框架,可以避免复杂查询的开销,减少不必要的计算和数据传输,在满足简单查询需求的前提下,提高查询的性能和效率。这对于OLTP系统来说尤为重要,因为在该场景中,高并发的查询请求需要快速响应和处理。

特性增强

在利用索引条件获取并返回数据之后,新增处理扫描过滤条件的逻辑。让同时拥有索引条件和过滤条件的语句可以使用 SQL Bypass 功能。

img说明:在当前 MogDB 的执行逻辑下,索引条件用于在 B 树上检索数据,它直接作用于索引扫描算子。而扫描过滤条件仅用于扫描方法被调用之后过滤返回的数据。

特性约束

需要开启SQL Bypass功能,即设置enable_opfusion参数值为on。

示例

  1. 开启SQL Bypass功能。

    set enable_opfusion = on;
  2. 创建表,并插入数据。

    CREATE TABLE MogDB_sql_bypass_1 (id int, pname name, match text);
    INSERT INTO MogDB_sql_bypass_1
     VALUES (
             generate_series(1, 20000),
             'player# ' || generate_series(1, 20000),
             'match# ' || generate_series(1, 11)
         );
  3. 创建索引。

    CREATE index on MogDB_sql_bypass_1(id);
  4. 执行Explain查看索引扫描查询结果。

    • 简单的索引扫描场景

      MogDB=# explain (costs on) select id from MogDB_sql_bypass_1 where id = 1;
                                                       QUERY PLAN
       -----------------------------------------------------------------------------------------------------------
        [Bypass]
        Index Only Scan using mogdb_sql_bypass_1_id_idx on mogdb_sql_bypass_1  (cost=0.00..48.13 rows=11 width=4)
          Index Cond: (id = 1)
       (3 rows)
    • 带过滤条件的索引扫描场景

      MogDB=# explain (costs off) select id, pname, match from MogDB_sql_bypass_1 where id = 1;
                                   QUERY PLAN
       ------------------------------------------------------------------
        [Bypass]
        Index Scan using mogdb_sql_bypass_1_id_idx on mogdb_sql_bypass_1
          Index Cond: (id = 1)
       (3 rows)
       
      MogDB=# explain (costs off) select id, pname, match from MogDB_sql_bypass_1 where id = 1;
                                   QUERY PLAN
       ------------------------------------------------------------------
        [Bypass]
        Index Scan using mogdb_sql_bypass_1_id_idx on mogdb_sql_bypass_1
          Index Cond: (id = 1)
       (3 rows)
    • PBE场景中的索引扫描

      MogDB=# PREPARE p1 AS SELECT id FROM MogDB_sql_bypass_1 WHERE id = $1;
      MogDB=# PREPARE p2 AS SELECT id, pname, match FROM MogDB_sql_bypass_1 WHERE id = $1;
      MogDB=# PREPARE p3 AS SELECT id, pname, match FROM MogDB_sql_bypass_1 WHERE id = $1 AND match <> $2;
      
      MogDB=# explain(costs OFF)EXECUTE p1(2);
                                     QUERY PLAN
       -----------------------------------------------------------------------
        [Bypass]
        Index Only Scan using mogdb_sql_bypass_1_id_idx on mogdb_sql_bypass_1
          Index Cond: (id = $1)
       (3 rows)
       
      MogDB=# explain (costs off) EXECUTE p2(2);
                                   QUERY PLAN
       ------------------------------------------------------------------
        [Bypass]
        Index Scan using mogdb_sql_bypass_1_id_idx on mogdb_sql_bypass_1
          Index Cond: (id = $1)
       (3 rows)
       
      MogDB=# explain (costs off) EXECUTE p3(2, 'match# 7');
                                   QUERY PLAN
       ------------------------------------------------------------------
        [Bypass]
        Index Scan using mogdb_sql_bypass_1_id_idx on mogdb_sql_bypass_1
          Index Cond: (id = $1)
          Filter: (match <> $2)
       (4 rows)

相关页面

enable_opfusion

Copyright © 2011-2024 www.enmotech.com All rights reserved.