mysql - 优化mysql中的多 channel 连接

标签 mysql optimization union

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

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

在示例中,MySQL 对(巨大)表进行了两次完整传递。

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

如何说服 MySQL 一次完成此操作?

最佳答案

您可以尝试 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 演示

关于mysql - 优化mysql中的多 channel 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19355373/

相关文章:

c - VTune 2013 Profiler 给出错误 : “The Data Cannot be displayed,there is no viewpoint available for data ”

performance - 编译器优化的函数式代码比命令式代码执行得更好的示例

mysql - 在 MySQL 中按相邻列中的值查询

php - 比较 MySQL 中的日期与 PHP 中的日期

mysql - 添加/编辑 MYSQL 键

java - 如何在 Java 运行时使用 Spring 执行原生 SQL 查询?

mysql - 结合 select distinct 和 order by

php - 在 Laravel 中搜索列名以获取行

performance - If/Else,先测试真还是假

sql - 一个(稍微复杂的)SQL 查询?