2014-01-20 124 views
-1

我想转动下面的例子(CONCAT)滥用(处理时间),我使用的是:Mysql的数据透视表

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

这工作得很好,但是......它需要大约20秒每行我的表有+/- 2.500.000记录:-P (顺便说一句,下表是一个例子,而不是实际的)

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

除此之外,您是否在这些列上定义了索引?如果没有,请四处游览以查看哪个索引效果最好,为每个列分别索引或在person,var,val上复合索引。