2014-01-20 155 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上覆合索引。