跨生产的SQL查询优化?

时间:2019-03-28 17:53:18

标签: sql db2

我有以下模式

  • 客户(CID整数不为NULL,名称VARCHAR(30),地址VARCHAR(50))

  • 产品(PID整数不为空,名称为VARCHAR(50),价格为十进制(10,2))

  • 出售(SID BIGINT NOT NULL,STATUS VARCHAR(10),CID INTEGER,TOTALPRICE DECIMAL(30,2))

  • PRODUCTSALE(SID BIGINT不为空,PID INTEGER不为空,UNITED INTEGER,小计小数(30,2))

我目前有一个这样的声明:

32

我认为它正在创建四个表(P,S,PS,C)的交叉产品?我可以通过对其中四个使用自然连接来对其进行优化吗?优化此语句的另一种方法是什么?

1 个答案:

答案 0 :(得分:0)

从最大的表格开始,然后进行过滤。

SELECT p.NAME, COUNT(DISTINCT c.CID) AS NUM_CUSTOMERS
FROM ProductSale ps
INNER JOIN Product p ON ps.PID=p.PID
INNER JOIN Sale s ON ps.SID=s.SID
INNER JOIN Customer c ON s.CID=c.CID
GROUP BY p.Name
ORDER BY NUM_CUSTOMERS DESC