• ベストアンサー

INDEX SEEKについて

 主キーを設定した後、検索をかけるとClustered Index Scan になってしまい、大変遅くなってしまいます。  Index Seek にしたい場合、どのようにすればいいのでしょうか?    初心者なのであまりよくわかってないので、どなたかすいませんが、お教え願います。

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

  • ベストアンサー
  • hamha
  • ベストアンサー率61% (83/135)
回答No.1

検索ではなくて抽出だと思いますが、 抽出をしたいフィールドはどのフィールドでしょうか? 抽出したいフィールドにはインデックスを設定していますか? 抽出条件を設定する場合は、先頭一致もしくは完全一致でないと、全件サーチしますので抽出に要する時間は長くなります。下に例を示します。 Index Scan 遅い 部分一致:SELECT * FROM T_顧客 WHERE 名前 LIKE '%山%' 後方一致:SELECT * FROM T_顧客 WHERE 名前 LIKE '%山' Index Seek 早い 先頭一致:SELECT * FROM T_顧客 WHERE 名前 LIKE '山%' 完全一致:SELECT * FROM T_顧客 WHERE 名前 = '山田' 部分一致抽出で早くしたいのであれば、2ステップでの抽出という手もあります。 ・特定の条件である程度絞り込んでから、次に部分一致抽出 例:10000件→100件→部分一致抽出 それから、必要なフィールドのみ出力することも重要です。(SELECT * は使わない)

TENEHT
質問者

補足

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

関連するQ&A

  • ACCESSで複数主キーにおけるseek検索

    ACCESSで複数主キーにおけるseek検索 ACCESS2000で複数の主キーを持つテーブルからseekで一致検索を行いたいが、 ADOを利用した場合のコードの書き方がわかりません。 テーブルは以下の3つのフィールドから構成されます。 フィールド1:フィールド2:フィールド3 年月日:担当職員:応対結果 ここで主キーは「年月日」と「担当職員」の2つで、「年月日」と「担当職員」が 一致するレコードをseekによって検索したいのです。 インデックスを表示させると「年月日」と「担当職員」が表示されます。 「年月日」の欄にのみ、インデックス名の欄にPrimaryKeyと書かれています。 DAOを用いて検索部分をVBAで書いたら動きました。 以下に検索部分だけ書きます。 (1) ds.Index = "PrimaryKey" (2) ds.Seek "=", 年月日, 担当職員 (3) If ds.NoMatch Then (4) MsgBox"そんなデータないですよ" (5) Else (6) MsgBox"一致するのがありました" しかしながら、ADOを用いた記述方法がわかりません。 上の(1)行は ds.Index = "PrimaryKey" でよいと思うのですが、(2)行以下がどう書いて良いかわかりません。 何卒宜しくお願いします。

  • ユニークインデックスについて

    仕事の関係で、テーブル定義の際にユニークインデックスをどの列の組み合わせにするのか考える必要があるのですが、今までユニークインデックスの存在自体知らず、困っています。 自分自身でネット等で調べた結果以下のことは理解できました。  1.ユニークインデックスで指定された列は値が一意でなければならない。  2.主キーの列にはNULL値は不可だが、ユニークインデックスの列はNULL値も可。  3.主キーは一つのテーブルにつき、一つしか設定できないが、    ユニークインデックスは複数設定できる。(同じ列は指定できない)  4.主キー設定時、実は暗黙的にユニークインデックスとNOT NULL制約が作成されている。 ここまでは分かったのですが、主キーとは別で、明示的にユニークインデックスを指定する必要性とはなんなのでしょうか? 主キーとは別で明示的に指定した方が良い場合と、その実例をどなたか教えて頂けないでしょうか? よろしくお願いします。

  • ACCESSVBAのseekで複数INDEX検索方法について

    こんにちは。 seekで、複数のINDEXに対して、それぞれ設定した条件を検索かける具体的なコードの書き方がわからず困っています。教えてください。(単一INDEXではできました) 例えば、社員名、日付、応対結果といった複数のフィールドに対して、フォームに入力されたそれぞれの値で検索をかけたいのです。またその際に、入力されてないところは無視して、入力された条件のみで検索をかけたいのですが、可能でしょうか? 現在、DAOを使ってコーディングしているので、DAOで具体的なコード例を教えていただけるとありがたいです。 文章がわかりにくくて申し訳ありませんが、よろしくお願いします。

  • DAOのSeekメソッドの不等号について

    DAOのSeekメソッドの不等号について いつもお世話になっております。 あるテーブルの項目A,B,Cにインデックス"検索用"と名前をつけたとします。 DAOのSeekメソッドで、 RS.index = "検索用" RS.seek ">=", 10, 20, 30 とした場合、返される結果は、クエリで Where A >= 10 and B >= 20 and C>=30 と条件指定したものと同じでしょうか? よろしくお願い致します。

  • インデックス「いいえ」 インデックス「はい (重複

    アクセスのテーブルについて質問なんですが インデックス「いいえ」 インデックス「はい (重複あり)」 の違いはなんでしょう? はい (重複なし)にすると、インデックス「いいえ」 と見た目は変わらないけど、 検索や並べ替えをする時に若干早くなるって事でしょうか? インデックス「はい (重複なし)」にした場合は、 主キーと同様、重複した値を入力できないので 違いが一目瞭然にわかりました。

  • インデックスについて

    オラクルのインデックスについて教えてください。 ObjectBrowserというソフトでオラクルDBを管理しているのですが、 インデックスとCONSTRAINTというものの違いが良くわかりません。 現在ObjectBrowserで、インデックスを重複不可にすることで、そのテーブルの 主キーとしています。しかし、CONSTRAINTでPRIMARYKEYも設定できることに 最近気づきました。 ObjectBrowserに限らず、この違いについて教えてもらえないでしょうか? どのような時にインデックスを使い、CONSTRAINTのPRIMARYKEYはこのような時に 使用するという風にお教えていただければ幸いです。 何分、データベース初心者なもので... 宜しくお願い致します。

  • 2つのインデックスと複合インデックスの違い

    Accessで 顧客IDと顧客名を含むテーブルがあったとします。 そこで 1.顧客IDのインデックスと顧客名のインデックスの2つのインデックス 2.顧客ID、顧客名の順番で定義した複合インデックス 2つの違いが分かりません。 インデックスといえば、 固有インデックス(主キー)とプロパティで設定するインデックスの知識しかないのですが、 たぶん、1.のほうは、 両方のフィールドとも、検索時のパフォーマンスが向上して、 2.のほうは 顧客IDだけ? と、想像するのですが・・ 2つのインデックスと複合インデックスの設定の仕方も分からないので、どこを使って設定するのか教えてください。

  • 主キーとインデックスの違いについて

    はじめまして。 SqlServerのテーブル作成をしていますが、 主キーとインデックスの違いがよく分かりません。 いつも主キーの設定は行っていますが、インデックスの設定も必要なのでしょうか。(パフォーマンスの向上の為?) 基本的な事ですみませんが ご教授お願いします。

  • mysqlのindexとprimary keyについて

    indexキーとprimary keyについてですが、違いというのは、NULLが許可されるか、されないかの違いでしょうか? データベースから検索する際に、indexキーがある方が検索スピードが速いということですが、あるHPに《PRIMARY KEY が宣言されたカラムは自動で Index Key と Unique Key が適応されます》とありました。 ですので、検索スピードを上げるには、PRIMARY KEYを設定すれば、indexキーが設定されたのと同じ事になるのでしょうか?

    • ベストアンサー
    • MySQL
  • インデックスのまとめ貼りと個別貼り

    いつもお世話になっております。 インデックスを貼るときに主キーのようにまとめて 設定することができますよね。 CREATE INDEX Idx原価 ON T原価 (商品名,発注番号); 上記のようにまとめて設定するのと CREATE INDEX Idx原価_商品名 ON T原価 (商品名); CREATE INDEX Idx原価_発注番号 ON T原価 (発注番号); このように2つに分けて貼るのでは意味は違ってくるのでしょうか? 商品名と発注番号の検索が別々に行われる場合は 分けて作成したら良いのでしょうか?