なぜか質問を投稿すると反映されない。。 何かしら問題があってはじかれている??
1対多のテーブルを結合し多テーブルの最大値のみ取得する
ユーザーごとに最後に実行したデータを取得したい時のクエリーをチューニングしてみた。
1つ目のテーブルはユーザーリスト
userId(Primary)
userName
2つ目のテーブルはそのユーザーごとのデータが保存されている。
id(Primary)(AutoIncrement)
userId(Index)
処理に時間がかかっていたクエリ
SELECT `T1`.`userId`
  FROM `table1` AS `T1`
 INNER JOIN `table2` AS `T2`
         ON `T2`.`userId` = `T1`.`userId`
 GROUP BY `T1`.`userId`
 ORDER BY `T1`.`userId` DESC
         ,`T2`.`id` DESC
;
/* この時のEXPLAIN */
           id: 1
  select_type: SIMPLE
        table: T1
         type: index
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 462
        Extra: Using temporary; Using filesort
JOINしてからGROUPするとメモリーが足らなくなり一時テーブルを作成してしまったようだ。
JOINする前に数を減らすことで改善した。
SELECT `T1`.`userId`
  FROM `table1` AS `T1`
 INNER JOIN `table2` AS `T2`
         ON `T2`.`id` = (SELECT MAX(`T`.`id`) FROM `table2` AS `T` WHERE `T`.`userId = `T1`.`userId`)
 ORDRE BY `T1`.`userId` DESC
;
/* この時のEXPLAIN */
           id: 1
  select_type: PRIMARY
        table: T1
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 5
        Extra:
  
  
			
	
	 検索

コメントを残す