質問 |
||
| 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 |
|
| |
| この回答へのお礼 | ありがとうございました。 大変参考になりました。 |