首页 > 其他分享 >【YashanDB知识库】使用select * 创建的物化视图无法进行查询重写

【YashanDB知识库】使用select * 创建的物化视图无法进行查询重写

时间:2024-07-30 16:55:09浏览次数:14  
标签:YashanDB 视图 查询 test tid 重写 select

问题现象

使用如下语句准备测试数据:

alter system set query_rewrite_enabled=force scope=both;
drop table test;
create table test(tid number, tname varchar2(30));
begin
  for i in 1..100000 loop
    insert into test values(i, i||'abcd');
  end loop;
end;
/
commit;
drop materialized view mv_1;
create materialized view mv_1
as
select * from test where tid = 66;
alter materialized view mv_1 enable query rewrite;

使用select * from test where tid = 66以及select tid,tname from test where tid = 66,均无法进行查询重写:

使用带双引号的大写字段名才可以进行查询重写:

问题的风险及影响

物化视图无法进行查询重写,影响查询性能

问题影响的版本

所有yashandb版本

问题发生原因

目前yashandb在进行物化视图的查询重写时,使用的是select中的列名匹配,未根据查询的语义进行匹配

解决方法及规避方式

在select中使用带双引号的大写列名

问题分析和处理过程

在存储物化视图时,create 物化视图如果下发的是select *,那么yashandb会将select *展开,存储为列名

在matchCompactedSQLText中,使用的是列名进行匹配。

1、如果后面想进行查询重写的语句是select *,目前的实现是在select *展开以前进行列的匹配,很明显,与dba_mviews中存储的select "TID","TNAME"是匹配不上的

2、如果后面想进行查询重写的语句是select tid,tname,因为大小写匹配不上

3、如果后面想进行查询重写的语句是select TID,TNAME,因为没有用双引号包含,依然匹配不上

以上三种情况均无法进行查询重写

经验总结

目前yashandb的物化视图查询重写功能还是比较弱,急需改进。

标签:YashanDB,视图,查询,test,tid,重写,select
From: https://www.cnblogs.com/YashanDB/p/18332871

相关文章

  • 返回视图与副本。尝试在 DataFrame 的切片副本上设置一个值。尝试使用 .loc[row_index
    我从雅虎财经(yfinance)下载了有关股票交易价格和交易量的数据。然后我创建了Closes数据框,其中包含收盘价和成交量的数据(我删除了不必要的信息)。然后我想将列添加到Closes数据框中,并计算年、季度、月和周的平均交易量。但在执行代码时,会出现警告“正在尝试在DataFrame切......
  • 【YashanDB知识库】如何远程连接、使用YashanDB?
    问题现象在各个项目实施中,我们经常遇到客户、开发人员需要连接和使用YashanDB但不知如何操作的问题,本文旨在介绍远程连接、使用YashanDB的几种方式。问题的风险及影响无风险问题影响的版本历史版本~23.2问题发生原因无解决方法及规避方式不需要规避问题分析和处理过程......
  • MySQL 学习笔记 进阶(SQL优化,视图,存储过程 上)
    SQL优化 SQL优化-插入数据insert优化·批量插入insertintotb_uservalues(1,'Tom'),(2,'Cat'),(3,'Jerry');·手动提交事务starttransaction;insertintotb_uservalues(1,'Tom'),(2,'Cat'),(3,'Jerry......
  • 【YashanDB知识库】如何使用yasldr导入lob类型?
    问题现象在各个项目实施中,有时候会使用到yasldr工具进行csv数据的导入。关于yasldr一般的使用方法,官方文档已经有详细的介绍,具体可见:yasldr使用指导。但在涉及LOB类型的导入时,会有一些疑问,比如什么是lls模式、什么是lobfile模式等等。本文就关于如何使用yasldr导入lob类型做进一......
  • 使用带有广播或各种数组形状的 numpy select
    我有各种数组形状,我尝试使用np.select()。我的代码selected_results适用于这种情况:#Givenarraysresults=[[array(['alpha'],dtype=object)array([0.16134485])array([-2.19302435,0.57976273])array([1.25348942,0.77778261])array([0.56136549,0.......
  • 21、flask-进阶-类视图和RESTful-前后端分离概念
    前后端分离与不分离概念前后端不分离:如render_template('index.html',data=data)这种就是前后端不分离前端和后端一起渲染前后端分离:后端返回json数据-jsonify()前端使用ajax来请求数据:ajax各自处理各自的数据,代码不在一起http请求方式:GET:查询POST:添加数据......
  • com.github.yulichang.wrapper.MPJLambdaWrapper selectJoinOne用法
    selectJoinOne方法是mybatis-plus-join项目中的一个方法,用于实现单表查询并关联查询其他表的数据。以下是一个使用selectJoinOne的示例:假设我们有两个表:用户(User)和订单(Order),我们想要查询用户的详情,并且关联查询该用户的第一个订单。java//引入MPJLambdaWrapperimportc......
  • 数据表或视图不存在[错误代码] SQLSTATE[42S02],数据库表不存在
    问题分析:有一些用户在升级的过程中遇到升级中断的问题  导致这个问题的出现有几种可能性:第一种是由于以往升级的过程中数据表丢失,从而影响升级。第二种是人为改动或二开过数据库表,导致升级时数据表和官方不一致,从而影响升级。如:网站搬家处理不当,后台版本与数据库版本不一致。 ......
  • 【YashanDB知识库】列与存储过程中重名变量/别名问题
    问题现象当一条查询中出现了重复别名,或者在一个存储过程中出现了变量名称与查询中别名相同,就会报错。这个问题在多个客户现场出现。createtabletest_tab1(c1int,c2int);createtabletest_tab2(c1int,c2int);select*fromtest_tab1t1jointest_tab2t2ont2.......
  • forms.ModelMultipleChoiceField 与 widget=FilteredSelectMultiple 不适用于自定义新
    我试图在自定义的新管理表单页面上显示forms.ModelMultipleChoiceField但它似乎没有像在已经制作的Django页面上显示的方式显示,例如模型产品Django管理页面。我的forms.ModelMultipleChoiceField看起来像这样:显示我的forms.ModelMultipleChoiceField是什么样子......