如何优化包含INNER JOIN的PostgresqlSQL查询

问题描述

我正在尝试创建一个包含订单表中可疑订单的视图。 可疑订单的条件是,每个新订单(间隔内)都具有“新客户”标签,并使用表_sdc_sequence中的折扣代码orders__discount_codes)以及邮政编码或电话在该时间间隔之前匹配的客户数量。 我的尝试是

  1. 创建一个视图,其中包含所有带有“新客户标签”的旧订单(间隔2天之前的订单)
CREATE OR REPLACE VIEW schema.old_orders_view AS
SELECT odr.id,odr.customer__id,odr.name,odr.billing_address__phone,odr.shipping_address__zip,odr.order_number,odr.updated_at 
FROM schema.orders odr,schema.orders__discount_codes odc
WHERE odr._sdc_sequence=odc._sdc_sequence 
AND
odr.updated_at<Now() - interval '2 day' 
AND  
odr.tags LIKE'%New Customer%' 
AND 
odr.cancelled_at is null
AND
odr.confirmed ='t';
  1. 创建了一个包含新订单的视图(在2天内)
CREATE OR REPLACE VIEW schema.new_orders_view AS
SELECT odr.id,schema.orders__discount_codes odc
WHERE odr._sdc_sequence=odc._sdc_sequence 
AND
odr.updated_at>=Now() - interval '2 day' 
AND  
odr.tags LIKE'%New Customer%' 
AND 
odr.cancelled_at is null
AND
odr. confirmed ='t';
  1. 后来内心加入了他们
CREATE OR REPLACE VIEW schema.suspicIoUs_orders_view AS
SELECT n_odr.customer__id new_customer__id,n_odr.name new_name,o_odr.customer__id old_customer__id,o_odr.name old_name,o_odr.updated_at old_updated_at,n_odr.updated_at new_updated_at,o_odr.id old_id,n_odr.id new_id          
FROM
schema.new_orders_view n_odr,schema.old_orders_view o_odr
WHERE
o_odr.billing_address__phone=n_odr.billing_address__phone
OR
o_odr.shipping_address__zip=n_odr.shipping_address__zip;

我需要的是第三个视图(suspicIoUs_orders_view )。

有什么方法可以优化这些查询?该表包含多个100K记录。每天new_orders_view中有50-100条新记录 如果查询没有两个虚拟视图,则更好(如果无法优化,则效果也很好)。

我已在我的应用程序中使用过此功能,并尝试与google data studio连接 错误

错误

Unable to Connect Host: An I/O error occurred  while  sending to the backed.

因此,优化查询会更合适。

我正在使用Postgresql 10。

任何帮助将不胜感激。预先谢谢你。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...