(Пожалуйста, используйте настоящие имена столбцов; часто там есть полезные подсказки.)
Может быть это будет быстрее ...
Во-первых, давайте посмотрим, как быстро можно выполнить все GROUP_CONCATs
одновременно:
SELECT col3,
GROUP_CONCAT(DISTINCT col4) AS list
FROM my_table
GROUP BY col3;
Это займет полное сканирование таблицы (290M строк), но его можно ускорить с помощью
INDEX(col3, col4) -- in this order
что означает «покрытие».
Однако, поскольку у вас col1
и col2
запятнаны работы, давайте изменим на
SELECT col1, col2, col3,
GROUP_CONCAT(DISTINCT col4) AS list
FROM my_table
GROUP BY col1, col3, col3;
и
INDEX(col1, col2, col3, col4) -- in this order
В этот момент у вас есть все данные, но вам нужно их «развернуть». (См. Тег [pivot]
.)