LightDB - no_star_transformation

LightDB 从23.4开始支持 no_star_transformation hint。
在Oracle 中no_star_transformation hint 用于提示优化器不执行星型转换。LightDB 不支持星型转换,因此此hint总会起效,下面先介绍下星型转换,然后介绍下hint的用法。

Oracle 星型转换

星型转换是一种优化器转换,它避免了对星型模式中事实表的全表扫描(星型模式将数据分为事实表和维度表)。

在事实表和维度表的连接中,星型转换可以避免对事实表的全表扫描。星型转换通过位图索引来获取事实表上需要的行(由维度表过滤),从而提高性能。

在某些情况下,查询在维度表的非关联列上有过滤条件。通过组合这些过滤条件可以显著减少数据库需要处理的来自事实表的数据集。

转换后查询按如下两阶段执行:

  • 第一阶段是由事实表利用位图索引的位图信息 (或者由 B*树索引的 ROWID 转换得来的位图信息)进行位图操作,进而获得相应数据集;
  • 第二阶段则将第一阶段获得的数据集与维度表进行关联,获取最终查询结果。

使用示例

初始化

CREATE TABLE times (time_id NUMBER PRIMARY KEY,calendar_quarter_desc VARCHAR2(20));CREATE TABLE customers (cust_id NUMBER PRIMARY KEY,cust_city VARCHAR2(20),cust_state_province VARCHAR2(20));CREATE TABLE channels (channel_id NUMBER PRIMARY KEY,channel_class VARCHAR2(20),channel_desc VARCHAR2(20));CREATE TABLE sales (time_id NUMBER REFERENCES times(time_id),cust_id NUMBER REFERENCES customers(cust_id),channel_id NUMBER REFERENCES channels(channel_id),amount_sold NUMBER);-- oracle 中需要对事实表建立bitmap索引, LightDB 不支持bitmap 索引,不执行
--create bitmap index sales_i1 on sales(time_id);
--create bitmap index sales_i2 on sales(cust_id);
--create bitmap index sales_i3 on sales(channel_id); 

执行SQL

lightdb@postgres=# EXPLAIN (COSTS false) SELECT/*+no_star_transformation*/ ch.channel_class, c.cust_city, t.calendar_quarter_desc,SUM(s.amount_sold) sales_amountFROM sales s, times t, customers c, channels chWHERE s.time_id = t.time_idAND s.cust_id = c.cust_idAND s.channel_id = ch.channel_idAND c.cust_state_province = 'CA'AND ch.channel_desc in ('Internet','Catalog')AND t.calendar_quarter_desc IN ('1999-Q1','1999-Q2')GROUP BY ch.channel_class, c.cust_city, t.calendar_quarter_desc;
LOG:  lt_hint_plan:
used hint:
no_star_transformation
not used hint:
duplication hint:
error hint:QUERY PLAN                    ----------------------------------------------------------------------------
---------------------------GroupAggregateGroup Key: ch.channel_class, c.cust_city, t.calendar_quarter_desc->  SortSort Key: ch.channel_class, c.cust_city, t.calendar_quarter_desc->  Nested Loop->  Nested Loop->  Hash JoinHash Cond: (s.cust_id = c.cust_id)->  Seq Scan on sales s @"lt#0"->  Hash->  Seq Scan on customers c @"lt#0"Filter: ((cust_state_province)::text 
= 'CA'::text)->  Index Scan using times_pkey on times t @"lt#0"Index Cond: (time_id = s.time_id)Filter: ((calendar_quarter_desc)::text = ANY ('{1
999-Q1,1999-Q2}'::text[]))->  Index Scan using channels_pkey on channels ch @"lt#0"Index Cond: (channel_id = s.channel_id)Filter: ((channel_desc)::text = ANY ('{Internet,Catalog
}'::text[]))
(18 rows)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年第十二届数学建模国际赛小美赛C题雪崩防范求解分析

2023年第十二届数学建模国际赛小美赛 C题 雪崩防范 原题再现: 雪崩是极其危险的现象。现在,我们对雪崩是如何形成的已经有了很好的理解,但是我们还不能详细地预测雪崩发生的原因、时间和地点。村庄和道路可以通过各种方式防止雪崩。避免在脆…

Git Hooks实战:提交前检查修改文件中是否包含调试代码

说在前面 不知道大家有没有遇到这样一种情况,平时在写代码调试时有时候会使用到debugger,可能大部分时间在提交代码前会记得把debugger先删除,但可能也会存在将debugger提交上去的情况,那我们该怎么防止出现这种情况呢&#xff1…

torch查看GPU信息常用代码

torch.cuda.device_count() # 可以返回可用 GPU 的数量。torch.cuda.get_device_name(device) # 可以获取特定 GPU 的名称。其中 device 是 GPU 的索引(从 0 开始)# 查看所有gpu for i in range(torch.cuda.device_count()):print(torch.cuda.get_device…

sklearn教程:boston波士顿房价数据集

文章目录 数据集介绍导入库划分训练集测试集导入DataFrame创建学习模型 KNN Linear DecisionTree SVR训练模型预测数据绘图可视化数据标准化模型训练和预测数据集介绍 Boston数据集是一个经典的回归分析数据集,包含了美国波士顿地区的房价数据以及相关的属性信息。该数据集共…

基于Docker安装OpenIM

操作系统:CentOS 7.6 安装支持环境 安装golang 下载安装包 https://dl.google.com/go/go1.21.4.linux-amd64.tar.gz mkdir /opt/go1.21 tar -C /opt/go1.21 -xzf go1.21.4.linux-amd64.tar.gzvi /etc/profile #写入下面内容 export GOPATH/opt/go1.21 export P…

css如何设置文本添加下划线

css文本添加下划线 text-decoration: underline;text-decoration相关属性参数 参数描述none默认。定义标准的文本。underline定义文本下的一条线。overline定义文本上的一条线。line-through定义穿过文本下的一条线。blink定义闪烁的文本。inherit规定应该从父元素继承 text-…

享元设计模式

package com.jmj.pattern.flyweight;public abstract class AbstractBox {//获取图形的方法public abstract String getShape();//显示图形及颜色public void diplay(String color){System.out.println("方块形状:"getShape()",颜色:"color);}}package com…

linux常用命令(干货)

开关机重启相关: linux关机重启命令:https://blog.csdn.net/qq_38295166/article/details/79783404 关机: shutdown -h now 立刻关机 shutdown -h 10 10分钟后关机 重启: shutdown -r now 立刻重启 shutdown -r 10 10分钟后重启 shutdown -r…

基于SpringBoot实现SSMP整合

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…

23.Python 图形化界面编程

目录 1.认识GUI和使用tkinter2.使用组件2.1 标签2.2 按钮2.3 文本框2.4 单选按钮和复选按钮2.5 菜单和消息2.6 列表框2.7 滚动条2.8 框架2.9 画布 3. 组件布局4.事件处理 1.认识GUI和使用tkinter 人机交互是从人努力适应计算机,到计算机不断适应人的发展过程&#…

[ 蓝桥杯Web真题 ]-年度明星项目

目录 引入 介绍 准备 目标 效果 规定 思路 知识补充 解答参考 引入 hello,大家好!我注意到了之前发的一篇蓝桥杯Web应用开发的文章是关注度最高的,可能大部分关注我的小伙伴对蓝桥杯Web应用开发比较感兴趣,或者想要参加…

Flink(九)【时间语义与水位线】

前言 2023-12-02-20:05,终于写完啦,最近状态不错。刚写完又收到了她的消息哈哈哈哈,开心。 再去全力打拼一次,奋战一场,就算最后打了败仗也无所谓,至少你留下了足迹。 《解忧杂货店》 1、时间语义 …

第17关 深入理解K8s配置管理:ConfigMap和Secret的终极指南

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维,K8s是如何来进行服务配置管理的呢? 对于容器而言,如果我们想修改一个容器镜像里面的配置,可以在Dockerfile这一步,将修改好的配置复制…

出口贸易媒体发稿7种方法提升转化率的秘密武器解析-华媒舍

出口贸易成为了许多企业发展的重要方向。在这个竞争激烈的市场中,如何让自己的产品脱颖而出,吸引更多客户并提高转化率,成为了每个企业家都面临的挑战。本文将向大家介绍7种提升转化率的秘密武器:出口贸易媒体发稿方法。 1. 出口贸…

LeetCode刷题---合并两个有序链表

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏:http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的 我讲述…

基于深度学习的肺炎CT图像检测诊断系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在肺炎CT图像检测诊断方面具有广泛的应用前景。以下是关于肺炎CT图像检测诊断系统的介绍: 任务…

基于PHP的高中生物学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的高中生物学习平台 一 介绍 此高中生物学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 …

C语言KR圣经笔记 4.2返回非整数的函数

4.2 返回非整数的函数 到目前为止,我们给出的函数样例,不是不返回值(void)就是返回 int。如果函数必须要返回其他类型呢?许多的数值函数如 sqrt,sin 和 cos 返回 double;其他特定的函数返回其他…

【个人记录】NGINX反向代理支持同端口HTTP与HTTPS协议访问

监听4000端口,反向代理127.0.0.1:9090的Web网页 NGINX配置如下 server {listen 4000 ssl http2 ; server_name www.http.com,www.https.com; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forw…

Vue3【Set Up】语法糖 + TS快速上手

文章目录 script setup基本语法顶层的绑定会被暴露给模板响应式监听与计算使用组件父子组件传参(变化较大)父 -> 子 defineProps()子 -> 父 defineEmits()子组件暴露给父组件内部属性 defineExpose() defineOptions() 【很少用】 script setup &l…