更快的 CROSS JOIN 替代方案 - PostgreSQL

ben*_*diy 1 postgresql cross-join

我正在尝试交叉联接两个表(客户和项目),这样我就可以创建按客户按项目的销售报告。我有 2000 个客户和 2000 个商品。

SELECT customer_name FROM customers; --Takes 100ms

SELECT item_number FROM items; --Takes 50ms

SELECT customer_name, item_number FROM customers CROSS JOIN items; Takes 200000ms

我知道这是 400 万行,但是有可能让它运行得更快吗?我想最终将其与这样的销售表结合起来:

SELECT customer_name, item_number, sales_total FROM customers CROSS JOIN items LEFT JOIN sales ON (customer.customer_name = sales.customer_name, item.item_number=sales.item_number);

销售表显然不会包含所有客户或所有商品,因此这里的目标是有一个报告,显示所有客户和所有商品以及已售出和未售出的商品。

我正在使用 PostgreSQL 8.4

Mar*_*ers 5

回答你的问题:不,你不能比这更快地进行交叉连接 - 如果你可以,那么这就是交叉连接的实现方式。

但实际上您并不想要交叉连接。您可能需要两个单独的查询,一个列出所有客户,另一个列出所有商品以及它们是否已售出。