• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:selectで一部のレコードのみ検索)

効率的にユーザーネームを検索する方法

このQ&Aのポイント
  • tUserテーブルの数百万行の中から特定のユーザーネームを検索する際、本日登録されたユーザーのみを対象にすることで検索速度を向上させる方法があります。
  • Joinedカラムを降順に並び替えることで、本日登録されたユーザーの情報を先頭に取得することができます。
  • さらに、日付が本日以外になった場合は検索を終了させることで、無駄な負荷を避けることができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.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 ) が効果的かもしれません。

people900
質問者

お礼

回答ありがとうございました。 インデックスの存在を知りませんでした。 無事解決しました。 皆様、回答ありがとうございました。

その他の回答 (2)

回答No.2

No.1の者です。 本日のみの検索なので 「ORDER BY」以降の日付のソートは記述がいらなくなりますね。 それでは、がんばってください。

回答No.1

間違っていたら申し訳ありません。 Joined がユーザの登録日なのですから、条件を増やせばいいのではないでしょうか。 追加> and Joined  = 'システム日付' ※システム日付(20120218) select UserNAME, Joined from tUser where UserNAME = testname and Joined  = 20120218 ORDER BY Joined DESC; ではいかがでしょうか。

people900
質問者

お礼

回答ありがとうございます。 select UserNAME, Joined from tUser where UserNAME = testname and Joined  = 20120218 ORDER BY Joined DESC; これは既に試していたのですが、 これではUserNAMEがtestnameであり、なおかつJoinedが本日の日付を、全レコードから探すというクエリになってしまいます。 全レコードが検索対象になってしまっては負荷がかかってしまうのです。 本日以外のレコードを検索し始めた瞬間、処理をそこで終了させたいのです。 また何かわかりましたらご教示頂けると幸いです。 ありがとうございました。

関連するQ&A