- ベストアンサー
効率的にユーザーネームを検索する方法
- tUserテーブルの数百万行の中から特定のユーザーネームを検索する際、本日登録されたユーザーのみを対象にすることで検索速度を向上させる方法があります。
- Joinedカラムを降順に並び替えることで、本日登録されたユーザーの情報を先頭に取得することができます。
- さらに、日付が本日以外になった場合は検索を終了させることで、無駄な負荷を避けることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Joinedに索引がないのではないのではないでしょうか。 CREATE INDEX 索引名 ON tUser (Joined) として索引を作成し条件に Joined >= TRUNC(SYSDATE) AND Joined < TRUNC(SYSDATE+1) を追加してみてください。 場合によっては CREATE INDEX 索引名 ON tUser (UserNAME,Joined ) か CREATE INDEX 索引名 ON tUser (Joined,UserNAME ) が効果的かもしれません。
その他の回答 (2)
- r32yokoyok
- ベストアンサー率50% (9/18)
No.1の者です。 本日のみの検索なので 「ORDER BY」以降の日付のソートは記述がいらなくなりますね。 それでは、がんばってください。
- r32yokoyok
- ベストアンサー率50% (9/18)
間違っていたら申し訳ありません。 Joined がユーザの登録日なのですから、条件を増やせばいいのではないでしょうか。 追加> and Joined = 'システム日付' ※システム日付(20120218) select UserNAME, Joined from tUser where UserNAME = testname and Joined = 20120218 ORDER BY Joined DESC; ではいかがでしょうか。
お礼
回答ありがとうございます。 select UserNAME, Joined from tUser where UserNAME = testname and Joined = 20120218 ORDER BY Joined DESC; これは既に試していたのですが、 これではUserNAMEがtestnameであり、なおかつJoinedが本日の日付を、全レコードから探すというクエリになってしまいます。 全レコードが検索対象になってしまっては負荷がかかってしまうのです。 本日以外のレコードを検索し始めた瞬間、処理をそこで終了させたいのです。 また何かわかりましたらご教示頂けると幸いです。 ありがとうございました。
お礼
回答ありがとうございました。 インデックスの存在を知りませんでした。 無事解決しました。 皆様、回答ありがとうございました。