天天看点

刷新物化视图很慢_怎么用实体表、普通视图、物化视图实体表订单表商品信息表普通视图物化视图

实体表

  • 假如你做电商平台,你需要把客户下单的记录存储在数据库里
  • 实体表就是具体存储数据的载体
刷新物化视图很慢_怎么用实体表、普通视图、物化视图实体表订单表商品信息表普通视图物化视图

订单表

  • create table t_orders as (order_num varchar2(100),customer_name varchar2(100),product_code varchar2(100),product_qty number,product_price number(15,2),order_date date)
  • order_num:订单编号
  • customer_name:顾客姓名
  • product_code:商品编号
  • product_qty:商品数量
  • product_price:商品价格
  • order_date:下单时间

商品信息表

  • create table t_product as (product_code varchar2(100),product_name varchar2(500))

普通视图

  • 顾客下单了,你想看一下顾客买了什么商品
  • 写了一段sql查询
  • select t1.customer_name,t2.product_name from t_orders t1 join t_product t2 on t1.product_code = t2.product_code
  • 你每天都想看顾客买了什么商品,但你又不想每次都写这么长一段,索性创建一个视图。
  • create view v_order_product as select t1.customer_name,t2.product_name from t_orders t1 join t_product t2 on t1.product_code = t2.product_code
  • 然后你就只用写一句 select * from v_order_product 搞定

物化视图

  • 当你的顾客越来越多,订单数量越来越大,你想统计一下每天的订单量,用表还需要另外做调度每天统计,用视图数据量过大又太慢,物化视图能够满足你的速度要求。
CREATE MATERIALIZED VIEW MV_ORDER_COUNTREFRESH FORCE ON DEMANDSTART WITH TO_DATE('20-03-2020 08:00:00', 'DD-MM-YYYY HH24:MI:SS') NEXT TO_DATE( CONCAT (TO_CHAR(  SYSDATE + 1 , 'DD-MM-YYYY' ), '08:00:00' ), 'DD-MM-YYYY HH24:MI:SS' )ASSELECT TO_CHAR(ORDER_DATE,'YYYYMMDD') AS ORDER_DATE,COUNT(DISTINCT ORDER_NUM) AS ORDER_COUNT FROM T_ORDERSGROUP BY TO_CHAR(ORDER_DATE,'YYYYMMDD');
           
  • 每天早上8点这个物化视图就会刷新数据等你临幸了。