ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3422340 (初心者です)パフォーマンスの良いSQLの書き方
質問者:m-m- SQL初心者です。初歩的かもしれませんが
教えていただけると助かります。

社員情報を管理するマスタテーブル『MST』(PKはSHAIN_ID)、
社員のシステムログイン履歴をログとして残すテーブル『LOG』
(PKはSEQのみ、SHAIN_IDとLOGIN_DATEを持つ)
があります。

社員ごとに最新のログイン日付を表示するとき、
以下のようなSQLを書いたところ「パフォーマンス上あまりよくないSQL」
と言われてしまったのですが、どのように改善すればよいでしょうか?

------------------------------------------
SELECT MST.SHAIN_ID,
    MST.SHAIN_NAME,
    LOG.LOGINTIME
FROM  MST,
   (SELECT LOGINUSERID,
       MAX(LOGINDATE) LOGINDATE
    FROM LOG
    GROUP BY SHIAN_ID
   ) LOG
WHERE MST.SHAIN_ID = LOG.SHAIN_ID
ORDER BY
   MST.SHAIN_ID
------------------------------------------
困り度:
  • すぐに回答を!
質問投稿日時:
07/10/12 10:31
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.1 ぱっと思いついたのは
--
SELECT MST.SHAIN_ID, MST.SHAIN_NAME, MAX(LOG.LOGINTIME)
FROM MST, LOG
WHERE MST.SHAIN_ID = LOG.SHAIN_ID
GROUP BY MST.SHAIN_ID, MST.SHAIN_NAME
ORDER BY MST.SHAIN_ID;
--
※動作検証していませんので、動作保障はしません。

パフォーマンスが悪い理由はFROM句にクエリーを使っていることです。
必要なとき以外は使わないほうがよいです。
回答者:Mizyu
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
07/10/12 11:12
この回答へのお礼ありがとうございました。
大変参考になりました。