【YashanDB知识库】使用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知识库】使用select * 创建的物化视图无法进行查询重写的更多相关文章
- sqlserver 创建索引 物化 视图
索引视图: create view Test WITH SCHEMABINDING as select Id, Name from [dbo].[InterfaceCallSetting]creat ...
- Oracle物化视图的创建及使用(一
Oracle物化视图的创建及使用 http://blog.csdn.net/tegwy/article/details/8935058 先看简单创建语句: create materialized ...
- Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建
目的:实现远程数据库访问及其相应表的定时同步 一.远程数据库dblink的创建 select * from dba_db_links; select * from user_sys_privs;--查 ...
- Oracle 物化视图 说明
一. 物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...
- 转: Oracle中的物化视图
物化视图创建语法:CREATE MATERIALIZED VIEW <schema.name>PCTFREE <integer>--存储参数PCTUSED <intege ...
- [terry笔记]物化视图 materialized view基础学习
一.物化视图定义摘录: 物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了 ...
- Oracle物化视图梳理
--物化视图可以分为三种类型:* 包含聚集的物化视图* 只包含连接的物化视图* 嵌套物化视图三种物化视图的快速刷新的限制条件有很大区别,而对于其他方面则区别不大. --物化视图创建方式(Build M ...
- ORACLE物化视图(物理视图)
百度文库 http://wenku.baidu.com/view/f78f55c68bd63186bcebbc4b.html ORACLE物化视图 一.------------------------ ...
- Oracle EBS 物化视图
怎么理解物化视图呢,先随意拿一个建物化视图的例子看一下. create materialized view EBS_ACCOUNTS_HIERARCHY_MV refresh complete on ...
- Oracle物化视图的一般使用
普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储 ...
随机推荐
- documen.write 和 innerHTML 的区别?
document.write只能重绘整个页面,innerHTML可以重绘页面的一部分. 1. ducument.write使用举例html文档: <!doctype html> <h ...
- 什么情况下会使用array.reduce函数
当业务需要从一个数组里求出某项的和的时候. 1.for遍历 var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] var resulte = 0; for (let inde ...
- 各类配置文件(DNS, Firefox,Edge)
DNS配置 腾讯DNS: 119.29.29.29 2402:4e00:: 2402:4e00:1:: 阿里云: 223.5.5.5 223.6.6.6 2400:3200::1 2400:3200 ...
- Volatile不保证原子性及解决方案
原子性的意义 原子性特别是在并发编程领域,是一个极其重要的概念,原子性指的是一个操作或一组操作要么全部执行成功,要么全部不执行,不会出现部分执行的情况.这意味着原子性操作是不可分割的,它们在执行过程中 ...
- C# ClassHelper动态创建程序集和类, 添加/删除类属性
using System; using System.Collections.Generic; using System.Reflection; using System.Reflection.Emi ...
- Nuxt 使用指南:掌握 useNuxtApp 和运行时上下文
title: Nuxt 使用指南:掌握 useNuxtApp 和运行时上下文 date: 2024/7/21 updated: 2024/7/21 author: cmdragon excerpt: ...
- Django Template层之自定义tag
Django Template层之自定义tag by:授客 QQ:1033553122 测试环境 Win7 Django 1.11 实践 步骤1 应用根目录下,新建templatetags包目录(注意 ...
- 《HelloGitHub》第 100 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. github.com/521xueweihan/HelloG ...
- 一张图看懂 SQL 的各种 JOIN 用法(含数据集和韦恩图)
- 【Vue】接口模块化处理
在前端Vue项目中,接口会被统一放在一个目录中管理: 一个模块的所有接口放在一个JS文件中: 文件会导入封装好的请求方法,和动态绑定的接口地址 import request from '@/utils ...