[前][次][番号順一覧][スレッド一覧]

mysql:15742

From: ram <ram <ram@xxxxxxxxxx>>
Date: Fri, 20 Apr 2012 09:36:59 +0900
Subject: [mysql 15742] 行列変換を行う処理を高速化するには?

日報データの訪問先(nm)を縦軸に、日付(npdt)を横軸にして、指定月の指定する
担当者の、
日別の訪問回数表を表示するため、

SELECT nm,
sum(case when Mid(CAST(npdt AS CHAR),7,2)='01' then 1 else 0 end) as 'h101',
sum(case when Mid(CAST(npdt AS CHAR),7,2)='02' then 1 else 0 end) as 'h102',
(中略)
sum(case when Mid(CAST(npdt AS CHAR),7,2)='30' then 1 else 0 end) as 'h130',
sum(case when Mid(CAST(npdt AS CHAR),7,2)='31' then 1 else 0 end) as 'h131',
FROM nippo
where npdt >= #from_ymd# and npdt < #to_ymd# and sycd = #sycd#
group by nm
order by nm

というようなSQLがあります。いわゆる行列変換です。
##の部分は変数が入ります。

件数が多くなると、検索時間が掛かるようになってきたため、
日付のうち、日(1-31)を表す部分を別の列(npdt_d)にして
sum(case when npdt_d ='01' then 1 else 0 end) as 'h101',
のように置き換えてみましたが、データ量が増えたせいなのか、結果は悪くなり
ました。

インデックスをはろうと思うのですが、group byを使う場合は、キー列と集計列
を含めた全ての列を
列挙しないと効果が無い、と出ていましたが、確かに、nmをインデックスにして
も効果は全くありません。
また、sum以下の式をインデックス列に定義する、式インデックスはMySQLでは使
えないようです。

こういった場合、集計用のテーブルを別に作って、このテーブルの更新時にトリ
ガーなどで随時更新
をしていく、という方法を取らざるを得ないのでしょうか?

集計項目が他にもあるので、こんどはアクセスの負荷が掛かるような気もします。
こうした経験をお持ちの方がおられましたら、アドバイス頂ければ有り難いです。



[前][次][番号順一覧][スレッド一覧]

->   15742 2012-04-20 09:36 [ram <ram@xxxxxxxxxx>] 行列変換を行う処理を高速化するには?    
     15743 2012-04-20 11:12 ┣[中川 貴 <takashi.nak]                                       
     15744 2012-04-20 13:58 ┃┗[ram <ram@xxxxxxxxxx>]                                     
     15745 2012-04-20 15:24 ┃ ┗[中川 貴 <takashi.nak]                                   
     15747 2012-04-20 17:58 ┃  ┗[ram <ram@xxxxxxxxxx>]                                 
     15748 2012-04-20 22:05 ┃   ┣[Tsubasa Tanaka <yoku]                               
     15749 2012-04-21 01:06 ┃   ┃┗[Tsubasa Tanaka <yoku]                             
     15750 2012-04-21 02:05 ┃   ┃ ┗[Tsubasa Tanaka <yoku]                           
     15753 2012-04-23 15:39 ┃   ┃  ┗[ram <ram@xxxxxxxxxx>]                         
     15756 2012-04-25 14:54 ┃   ┗[中川 貴 <takashi.nak]                               
     15758 2012-04-25 16:34 ┃    ┗[ram <ram@xxxxxxxxxx>]                             
     15759 2012-04-25 17:09 ┃     ┗[中川 貴 <takashi.nak]                           
     15760 2012-04-25 17:18 ┃      ┗[Tomohiro 'Tomo-p' KA]                         
     15761 2012-04-25 18:25 ┃       ┗[中川 貴 <takashi.nak]                       
     15762 2012-04-25 19:05 ┃        ┗[Tomohiro 'Tomo-p' KA]                     
     15752 2012-04-23 14:17 ┗[<gotou1213@xxxxxxxxx]                                       
     15754 2012-04-23 19:53  ┗[ram <ram@xxxxxxxxxx>]                                     
     15755 2012-04-24 13:50   ┗[<gotou1213@xxxxxxxxx]                                   
     15757 2012-04-25 15:39    ┗[ram <ram@xxxxxxxxxx>]                                 
     15765 2012-04-26 14:12     ┗[<gotou1213@xxxxxxxxx]