天天看點

重新整理物化視圖很慢_怎麼用實體表、普通視圖、物化視圖實體表訂單表商品資訊表普通視圖物化視圖

實體表

  • 假如你做電商平台,你需要把客戶下單的記錄存儲在資料庫裡
  • 實體表就是具體存儲資料的載體
重新整理物化視圖很慢_怎麼用實體表、普通視圖、物化視圖實體表訂單表商品資訊表普通視圖物化視圖

訂單表

  • 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點這個物化視圖就會重新整理資料等你臨幸了。