/ / optymalizacja łączenia wieloprzebiegowego w mysql - mysql, optimisation, union

optymalizacja łączenia wieloprzebiegowego w mysql - mysql, optymalizacja, unii

Mam jedną tabelę i chcę uzyskać różne wartości z każdej kolumny.

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

W tym przykładzie MySQL wykonuje dwa pełne podania (ogromnej) tabeli.

Próbuję uzyskać odrębne wartości z wielu kolumn, więc w rzeczywistości kwerendy wykonałoby 6 pełnych przejść tabeli.Mindeksowanie nie jest w tym przypadku opcja.

Jak mogę przekonać MySQL do zrobienia tego w jednym przebiegu?

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz spróbować zastosować metodę niepodzielną

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

Tutaj jest SQLFiddle próbny