なぜか質問を投稿すると反映されない。。 何かしら問題があってはじかれている??
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:
検索

コメントを残す