postgresql - 更快的 CROSS JOIN 替代方案 - PostgreSQL

标签 postgresql cross-join

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

SELECT customer_name FROM customers; --需要 100 毫秒

SELECT item_number FROM items; --需要 50 毫秒

SELECT customer_name, item_number FROM customers CROSS JOIN items;耗时 200000 毫秒

我知道这是 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

最佳答案

回答您的问题:不,您不能比这更快地执行交叉连接 - 如果可以的话,这将是 CROSS JOIN 的实现方式。

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

关于postgresql - 更快的 CROSS JOIN 替代方案 - PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067099/

相关文章:

json - 在单个查询中将 JSON 写入表

sql - 有没有办法在 excel 中执行交叉连接或笛卡尔积?

mysql - 是否可以用2个Mysql数据库实现JOIN查询?

sql - 交叉连接同一表中的 N 组行

sql - 混合隐式和显式 JOIN

带有 FOREACH 循环的 PostgreSQL PL/pgSQL 语法错误

postgresql - 如何将 ctid 系统列转换为 long,反之亦然

sql - 我想了解每台机器每天的工作时间的开始和结束时间

postgresql - 每次我创建一个新数据库时,它都会在该数据库中创建一个表

sql - 转换/删除查询中的交叉连接