toshizou-Rails

SQL問題(22/08/05)


自分の書いたコード

以下は参考にしたリンク
MySQL | データをグループ化する(GROUP BY句)
SQLで同一グループの中で最大/最小のレコードを取得する - Qiita

解答的にはok。

SELECT player_id, min(event_date) AS first_login FROM Activity
GROUP BY player_id

でもパフォーマンスが悪いように感じる...

Runtime: 1289 ms, faster than 7.13% of MySQL online submissions for Game Play Analysis I.
Memory Usage: 0B, less than 100.00% of MySQL online submissions for Game Play Analysis I.

答え(Discussから引用)



この問題から学んだこと

DISTINCTは高速化につながる(?)

DISTINCTの使い方及び、GROUP BYとの違いについて | IT職種コラム
SQL distinctとgroup byの実行計画が全く同じなのに大きな速度差が出る | ポテパンスタイル
DISTINCT vs GROUP BY - BASEプロダクトチームブログ

上記が参考になりました。

DISTINCTは、重複を排除した結果を出力する場合に使用
GROUP BYは、重複を排除した結果に対して集計処理を行いたい場合に使用

といった感じに使うのが良さそうらしい。

ただ、joinする場合は状況によって distinct, exists, group by のどれが早いかはある程度の件数のテストデータを使ってレスポンスの違いを観察する必要があるらしい。


以上