2014-01-20 6 views
-1

Я хочу, чтобы повернуть пример ниже, я использую:Mysql сводной таблицы (CONCAT) неправильное (время обработки)

SELECT Person, GROUP_CONCAT(Var) , GROUP_CONCAT(Val) 
FROM table 
GROUP BY Person 

Это прекрасно работает, но ... это занимает около 20 секунд в каждой строке и моя таблица имеет +/- 2.500.000 записей :-P (BTW, ниже таблица является примером, а не фактический один)

id person Var Val 
------------------------------- 
1 Bob  Height 185 
2 Bob  Weight 74 
3 Bob  Age  40 
4 Hank  Height 193 
5 Hank  Weight 90 
6 Hank  Age  45 
7 Bert  Height 180 
8 Bert  Weight 85 
9 Bert  Age  43 

PS: Помимо ответа (что бы вы удивительные) я также хотел бы знать, что «неправильно» с этим примером (делает вас еще более удивительным)

+0

Вы действительно хотите запустить запрос по всей таблице? У вас есть какие-либо условия для сокращения набора результатов? – vidaica

ответ

0

Там нет ничего плохого с ним, за исключением того, что я пишу это, как этот

SELECT Person, GROUP_CONCAT(CONCAT(Var, ': ', Val)) 
FROM table 
GROUP BY Person 

, потому что, когда вы разбить его на две колонки, вы не будете знать, какой Val принадлежит к которому Var.

Кроме того, у вас есть индексы, определенные на этих столбцах? Если нет, поиграйте, чтобы увидеть, какой индекс лучше всего работает, отдельные индексы для каждого столбца или составных индексов для человека, var, val.

Смежные вопросы