プロが教えるわが家の防犯対策術!

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
------------------------------------------

A 回答 (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句にクエリーを使っていることです。
必要なとき以外は使わないほうがよいです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
大変参考になりました。

お礼日時:2007/10/19 09:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!