在mysql中优化多传递连接

时间:2013-10-14 07:31:33

标签: mysql optimization union

我有一个表,希望从每列中获取不同的值。

select distinct 'customer', customer from sales
union
select distinct 'product',product from sales

在该示例中,MySQL执行(巨大)表的两次完整传递。

我正在尝试从许多列中获取不同的值,因此实际上查询将执行表的6次完整传递。在这种情况下,索引不是一种选择。

如何说服MySQL一次性完成这项工作?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用unpivot方法

SELECT DISTINCT 
       CASE WHEN type = 1 THEN 'customer' 
            WHEN type = 2 THEN 'product' 
       END type,
       CASE WHEN type = 1 THEN customer
            WHEN type = 2 THEN product
       END value
  FROM sales s CROSS JOIN 
(
  SELECT 1 type UNION ALL
  SELECT 2
) t
 ORDER BY type

这是 SQLFiddle 演示