ob的普通视图和mysql的普通视图内部实现一样吗?

【 使用环境 】生产环境
【 OB 】observer
【 使用版本 】3x和4x版本
【问题描述】3x版本和4x版本的mysql租户普通视图的实现和mysql的实现是否类似?mysql的视图并不会保存任何数据,当查询该视图时,会根据视图的定义进行查询。例如
CREATE VIEW recent_customer_orders AS
SELECT
c.customer_id as id,
c.name AS customer_name,
o.order_id as order_num ,
o.order_date,
o.amount
FROM
customers c
INNER JOIN
orders o ON c.customer_id = o.customer_id
WHERE
o.order_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
查询视图
select * from recent_customer_orders where id=10 order by order_date;

ob在查询的时候是不是会根据视图的定义对查询的sql语句进行改写,然后再执行join查询?如果join的2个表比较大,查询过程种是否会有临时文件产生以及内存的冲高?

基本上是一样的 你可以看看相关的文档
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003383501

1 个赞

我指的内部实现方式,不是sql语句哈

1 个赞

内部的实现方式可能不一样 但是视图不会保存数据 但是功能都是差不多的

1 个赞

不管哪个数据库用的视图都是不存数据的,除非是物化视图,你说的这个是SQL解析的问题,SQL解析的话,内部可能会修改你的SQL语句,修改为数据库认为最好的方式,也可以用Hint指定

1 个赞