首页 > 其他分享 >lightdb 忽略未知执行计划提示

lightdb 忽略未知执行计划提示

时间:2023-06-06 21:25:51浏览次数:52  
标签:sample rows lightdb hint 忽略 letter 未知 where SeqScan

lightdb 忽略未知执行计划提示

执行计划提示介绍见其他文章

背景

Oracle 中的执行计划提示(后文简称为 hint )种类繁多,lightdb 目前还没有做到全部兼容,因此需要忽视未实现的 hint, 继续执行其他支持的 hint. 比如:all_rows hint 不支持。

lightdb 中 hint 之间以空格分隔或 '()' 分割,如下面的 hint 都是有效的:

  • /*+ semijoin SeqScan(sample) */
  • /*+ SeqScan(sample)Rows(sample 10) */

测试用例

  1. 首先,根据 pg_class 创建一张临时表,用于后续测试。
create temporary table sample (letter, junk) as
	select substr(relname, 1, 1), repeat('x', 250)
	from pg_class
	order by random();

create index i_sample on sample(letter);

analyze sample;

pg_class 中大多数表都是以 'p' 开头的,因此查询条件 where letter = 'p' 会直接走全表扫描,而查询条件 where letter = 'k' 会走索引。

  1. 正常用例
/*+SeqScan(sample)*/ explain select count(*) from sample where letter = 'k';

上面结果会输出:

                         QUERY PLAN
-------------------------------------------------------------
 Aggregate  (cost=32.00..32.01 rows=1 width=8)
   ->  Seq Scan on sample  (cost=0.00..32.00 rows=1 width=0)
         Filter: (letter = 'k'::text)    
  1. 异常用例
-- all_rows 在前面
/*+ all_rows SeqScan(sample)*/
explain select count(*) from sample where letter = 'k';

-- all_rows 在后面
/*+ SeqScan(sample) all_rows */
explain select count(*) from sample where letter = 'k';

-- all_rows 带括号
/*+ all_rows() SeqScan(sample)*/
explain select count(*) from sample where letter = 'k';

-- all_rows 只有一个左括号
/*+ all_rows( SeqScan(sample)*/
explain select count(*) from sample where letter = 'k';

-- all_rows 只有一个右括号
/*+ all_rows) SeqScan(sample)*/
explain select count(*) from sample where letter = 'k';

-- all_rows 有嵌套括号
/*+ all_rows((hello)) SeqScan(sample)*/
explain select count(*) from sample where letter = 'k';

-- all_rows 关键字和括号之间有空格
/*+ all_rows () SeqScan(sample)*/
explain select count(*) from sample where letter = 'k';

异常用例输出示例:

INFO:  lt_hint_plan: hint syntax error at or near "all_rows"
DETAIL:  Unrecognized hint keyword "all_rows", ignored
                         QUERY PLAN
-------------------------------------------------------------
 Aggregate  (cost=21.19..21.20 rows=1 width=8)
   ->  Seq Scan on sample  (cost=0.00..21.19 rows=1 width=0)
         Filter: (letter = 'k'::text)

标签:sample,rows,lightdb,hint,忽略,letter,未知,where,SeqScan
From: https://www.cnblogs.com/winter1992/p/pg-ignore_unknown_hint.html

相关文章

  • lightdb增量检查点特性及稳定性测试
    checkpoint是一个数据库事件,它将已修改的数据从高速缓存刷新到磁盘,并更新控制文件和数据文件,此时会有大量的I/O写操作。在PostgreSQL中,检查点(后台)进程执行检查点;当发生下列情况之一时,其进程将启动:检查点间隔时间由checkpoint_timeout设置(默认间隔为300秒(5分钟))在9.5版或更高......
  • pandas value_counts() 会忽略统计nan 但是不会忽略 true false
    pandasvalue_counts()会忽略统计nan 但是不会忽略truefalse'''每列包含多少项nan'''foriindf_2:print(df_2.loc[:,i].isna().value_counts())应用'''每列包含多少项nan'''dict_counts={}foriindf_2:......
  • 认识LightDB - 高可用安装
    认识LightDB-高可用安装LightDB是恒生电子股份有限公司开发的一款关系型数据库,基于PostgreSQL生态。LightDB分为lightdb-x与lightdb-a两款产品,-a是基于Greeplum开发的,适用于OLAP场景,不太适合日间实时交易。本文若不进行特殊说明,所有LightDB都指的是lightdb-x......
  • IDEA 中 .gitignore 文件中 配置 忽略上传的文件
    target/pom.xml.tagpom.xml.releaseBackuppom.xml.versionsBackuppom.xml.nextrelease.propertiesdependency-reduced-pom.xmlbuildNumber.properties.mvn/timing.properties.mvn/wrapper/maven-wrapper.jar//下面的需要手动添加**/mvnw**/mvnw.cmd**/.mvn.idea**......
  • (三)linux同时安装pytorch和tensorflow1.14,忽略错误
    一、命令catrequirements.txt|xargs-n1pipinstall环境python3.7二、requirements.txtabsl-py==1.4.0astor==0.8.1autograd==1.5backcall==0.2.0Bottleneck==1.3.5certifi==2022.12.7chainer==7.8.1charset-normalizer==3.1.0click==8.1.3colorama==0.4.6......
  • Javaweb中在SQL语句中使用未知数进行多表查询
    这个问题主要是匹配好引号和单引号即可。如果是varchar型,那么变量要带单引号('),如果是int型就不用带。同时要注意用+号进行String的拼接。示例:publicList<Student>huizong_bujige(Stringkemu1){List<Student>list=newArrayList<>();Connectionconn......
  • 当涉及到基本数据类型和包装类时,一些你需要了解、可能容易被忽略的细节。(附面试题)
    基本数据类型Java基本数据按类型可以分为四大类:布尔型、整数型、浮点型、字符型,这四大类包含8种基本数据类型。布尔型:boolean整数型:byte、short、int、long浮点型:float、double字符型:char8种基本类型取值如下:数据类型代表含义默认值取值包装类boolean布尔型false0(false)到1(......
  • 忽略这些小事,你的简历会直接被Pass
    本文首发自公粽hao「林行学长」,欢迎来撩,免费领取20个求职工具资源包。了解校招、分享校招知识的学长来了!求职有三步,简历第一步。在各种简历筛选中,如果你不能做到百里挑一,那上岸机会其实是微乎其微简历是求职面试的敲门砖倘若因为忽略了一些小事而浪费掉自身优势,那可就太可惜了所以......
  • 配置 linux 的 bash 忽略命令大小写 和 能根据输入的命令头按“上“键显示该命令的历
    一般情况下,bash对命令是区分大小写的,当按“上键”时,能够显示前一个历史命令。但是,这还不太方便,下面的这个配置,可以让bash忽略大小写,而且,能根据输入的命令头按“上“键显示该命令的历史,比如:输入vim,然后按”上“键,此时,可以显示上一次运行vim时的那条命令,非常的方便!下面是该配置的......
  • P8584 探索未知 题解
    题意给你\(n\)个分数,每个分数后面跟着一个操作符\(op\),如果为\(1\)就是加上这个分数,是\(2\)就减去。初始时是\(0\),询问\(n\)次操作后最后的分数是多少,化成最简分数。特殊地,如果最后是个整数,直接以整数的形式输出。思路模拟考试的时候一看就想到了[NOIP2020]......