首页 > 数据库 >OB的SQL引擎_1

OB的SQL引擎_1

时间:2023-12-25 15:22:06浏览次数:43  
标签:status 缓存 SQL OB 引擎 DDL 执行 select

SQL请求执行流程

基本流程跟传统数据库没有区别。

1、SQL请求进来后,先进行Parser语法解析、解析完成后看是否有内存缓存,若有缓存则直接到执行器,进行SQL执行。若无缓存,则进行硬解析。

2、语法解析完成后,进行Resolver语义解析。--->Transformer 进行查询改写。--->Optimizer优化器进行生成执行计划---->Code Generator代码生成器将执行计划,生成可执行的代码。---->Executor执行器负责代码的执行。包括本地作业和远程、分布式作业。

 

执行计划快速参数化

传统的数据库,以oracle为例,执行计划缓存是按照“SQL文本”进行优化并缓存执行计划,根据“SQL文本”在缓存中快速查找执行计划,提高sql解析效率。

OB数据库是将SQL文本进行参数化,将常量替换为绑定变量。然后拿着替换后的“SQL文本”到内存中查找执行计划。

 

 

不能快速参数化的场景

  • 所有 ORDER BY 后常量(例如"ORDER BY 1,2;")
  • 所有 GROUP BY 后常量(例如"GROUP BY 1,2;")
  • LIMIT 后常量(例如"LIMIT 5;")
  • 被物化的参数精度数字(例如"NUMBER(10,2);")
  • select投影列中常量(例如"select 1 as id from tab;")
  • 作为格式串的字符串常量(例如"DATE_FORMAT('2006-06-00', '%d'); "里面的"%d")
  • 函数输入参数中,影响函数结果或带有隐含信息并最终影响执行计划的常量(例如"CAST(999.88 as NUMBER(2,1))"中的"NUMBER(2,1)",或者"SUBSTR('abcd', 1, 2)"中的"1, 2",或者"SELECT UNIX_TIMESTAMP('2015-11-1310:20:19.012');" 里面的"2015-11-13 10:20:19.012",指定输入时间戳同时,隐含指定了函数处理的精度值为毫秒)

快速参数化的优劣点思考

优势:

  更少的内存,能缓存更多的sql执行计划。

  减少硬解析次数,提高并发。

劣势:

  对于有数据倾斜的表可能造成执行计划不良,sql执行效率忽高忽低。select id,name,status  from t where status='GREEN'; status 一共就三个值,green,red, yellow,且绝大数据数据都是green。---->解决办法:select id,name  'GREEN' as status  from t where status='GREEN';  select id,name ,'YELLOW' as  status  from t where status='YELLOW';  select id,name ,'RED' as status  from t where status='RED'; 

DDL

  • OceanBase支持传统数据库的DDL语句,自动完成全局统一的schema变更,无需用户在多节点间做schema一致性检查
  • DDL任务由OceanBase的RootServer统一调度执行,保证全局范围内的schema一致性
  • 对于所有支持的 DDL 操作都是 OnLine 的,DDL不会产生表锁,在执行 DDL 的过程中不会阻塞业务的读写操作
  • DML根据schema信息的变更自动记录格式,对业务零影响
  • DML与DDL互相不阻塞,提高性能

 

标签:status,缓存,SQL,OB,引擎,DDL,执行,select
From: https://www.cnblogs.com/z-uncle/p/17926150.html

相关文章

  • centos 7.5 安装 sql server 2022
    官方文档地址:https://learn.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-ver16&tabs=rhel8选择RedHat8版本1.下载SQLServer2022(16.x)RedHat8存储库配置文件:sudocurl-o/etc/yum.repos.d/mssql-server.repohttps://pack......
  • Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL synta
    问题描述Causedby:java.sql.SQLSyntaxErrorException:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'orderwherestatus!='已完成''atline1问题解决最后发现时因为......
  • Unity引擎2D游戏开发,野猪基本的移动逻辑和动画
    一、类的继承在Scripts下创建Enemy文件夹,里面再创建两个C#文件将Boar文件内的代码修改为以下代码,:后的是Enemy,即继承了Enemy类publicclassBoar:Enemy{}在Enemy内,编写基本属性publicclassEnemy:MonoBehaviour{[Header("基本参数")]//基本移动速度......
  • 无涯教程-PostgreSQL - Views(视图)
    视图是伪表。也就是说,它们不是真实表,视图可以表示真实表的子集,从普通表中选择某些列或某些行。由于视图不是普通表,因此您可能无法在视图上执行DELETE,INSERT或UPDATE语句,但是,您可以创建一个RULE来纠正在视图上使用DELETE,INSERT或UPDATE的问题。创建视图PostgreSQL视图是使用CR......
  • 无涯教程-PostgreSQL - Truncate(清空表)
    PostgreSQLTRUNCATETABLE命令用于从现有表中删除完整数据,您也可以使用DROPTABLE命令删除完整的表,但是它将从数据库中删除完整的表结构,如果您希望存储一些数据,则需要再次重新创建该表。TruncateTable-语法TRUNCATETABLE的基本语法如下-TRUNCATETABLEtable_name;......
  • sqlserver判断字符串是否是数字
     sql2005有个函数ISNUMERIC(expression)函数:当expression为数字时,返回1,否则返回0。这只是一个菜鸟级的解决办法,大多数情况比较奏效。eg:selectISNUMERIC('123')--结果为1但是,该函数有个缺点!eg:复制代码 SELECT  ,ISNUMERIC('-')as'-'  --1 ,ISNUMERIC('+')as'+' ......
  • 无涯教程-PostgreSQL - Alter(修改表)
    PostgreSQLALTERTABLE命令用于在现有表中添加,删除或修改列,您还可以使用ALTERTABLE命令在现有表上添加和删除各种约束。AlterTable-语法ALTERTABLE在现有表中添加新列的基本语法如下:ALTERTABLEtable_nameADDcolumn_namedatatype;现有表中将ALTERTABLE更改为......
  • mysql设计表名称要不要加表前缀
    在MySQL中设计表时,是否添加表前缀主要取决于你的具体需求和设计考虑。以下是一些关于是否使用表前缀的考虑因素:1,避免表名冲突:如果你的应用程序要与其他应用程序或系统共享数据库,或者你预计将来会有多个应用程序或系统使用同一个数据库,使用表前缀可以帮助避免表名冲突。例如,你......
  • Docker 下安装免费版 Sqlserver
    在Docker中运行的免费版SQLServer和正式收费版SQLServer之间通常有以下差别:功能限制性能限制:免费版SQLServer可能会有性能方面的限制,例如最大数据库大小、最大内存限制或并发连接数限制。这些限制可能对大型生产环境的数据库影响较大。功能限制:免费版SQLServer......
  • 【模版】高精度乘法 (A*B problem)
    和A+Bproblem类似,不多说,直接看代码和注释就好啦!ww感觉这东西只要有个概念就行了...就是在练模拟?www其他语言似乎有大数加减乘除? 这样的高精度算法时间复杂度O(n2),n是数字位数,如果位数过大还是很慢。可以利用快速傅里叶变换的方式加速高精度乘法。(虽然都是我连傅里叶级数都没学......