• ベストアンサー

同じテーブルなのにフィルタの条件によって時間が全然

アクセス2010で、テーブルのデータが210000件あるのですが 同じテーブルなのにフィルタの条件によって時間が全然違います。 Aフィールドにフィルタをかける時は2秒ぐらいで結果が表示されるのに Bフィールドだと6秒くらいかかります。 フィルタはVBAでFilterOn = Trueを使っています。 なぜでしょうか?

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

AフィールドとBフィールドの種別は同じですか? また、フィルタでのフィールドの検索式は同一なのでしょうか? 完全一致で掛かる検索時間は数値型<文字型<コメントで変わりますし 文字列でも長さの決まったコードのようなものと名称の場合 INDEXの作りやすいコードの方が結果表示は早くなります。 完全一致での検索と、あいまい検索(ワイルドカード)でも時間は変わります。

MNDAKMDIQ
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • nerimaok
  • ベストアンサー率34% (1125/3220)
回答No.1

AとBの中身の違いがわからないと・・・ 後はインデックス貼ってるかどうかですね。

MNDAKMDIQ
質問者

お礼

ありがとうございました。

関連するQ&A

  • テーブル フィルタ < 抽出されない

    アクセス2010です。 テーブルには、 **************** フィールド1 # () <> **************** と入っています。 画像の様に フィルターで **************** < **************** から始まる文字を抽出しようとすると 検索結果が **************** フィールド1 # () **************** になります。 フィルターで **************** < **************** を含む値を抽出条件にすると、何も抽出されません。 **************** > **************** で終わるにすると 「正しい値を入力してください。」 となります。 **************** フィールド1 # () <> **************** この状態で <> を抽出するにはどうすればいいでしょうか? 全て半角です。

  • アクセス2003で検索条件と検索キーワード検索

    アクセス2003で検索機能を作りたいです。 まずプルダウンで検索条件を選び、さらに検索キーワードを手入力し、その条件に見合ったものを抽出するという形。 検索条件とは、フィールド名。検索キーワードは、フィールドの中にある言葉。 質問 (1)マクロのフィルタの実行のwhere条件式において 〔フィールド名〕like~と入れているのですが、この頭のフィールド名をいじくれば良いのか? (2)ある識者に伺ったところ、次のVBA(イベントビルダ)を教わりましたが、オブジェクトに値を代入できませんと出てきました。 Me.filter=""&Me.![テキスト名1]&"like'"&"*"&Me![テキスト名2]&"*"&"'" Me.filterOn=True このテキスト名1をコンボに変更しました(非連結)。検索条件となるあるテーブルを値ソースとしています。何か自分が間違っていますか? できれば、クエリを使うことなく行きたい。 アクセスのつくりとしては、 基幹となるテーブルAとそれに1対多にあるテーブルBそしてテーブルBと1対1にあるテーブルCの3つをクエリを用いて1つのフォームに表しています。 その中のいくつかのフィールドを選択条件とし(プルダウンで選ぶ)、キーワード入力する。 小職、アクセスを始めたばかりです。どうかよろしくお願いいたします

  • VBAで日付型とテキストでフィルタをかけるには?

    テーブルのデータは フィールド1 2012/1/1 2012/1/2 2012/1/3 2012/1/4 2012/1/5 2012/1/6 2012/1/7 2012/1/8 2012/1/9 2012/1/10 フィールド2 A A A A A B B B B B です。 このクエリをもとに票フォームを作成して、 ・txt_始まりテキスト ・txt_終わりテキスト ・txt_フィールド2テキスト を作りました。 あとコマンドボタン(cmd_抽出)も作りました。 このコマンドボタンを押して 日付とテキストを抽出したいのですがVBAでのやり方を教えてください。 クエリなら ------------------------------------------------------------ SELECT テーブル1.フィールド1, テーブル1.フィールド2 FROM テーブル1 WHERE (((テーブル1.フィールド1) Between #1/4/2012# And #1/6/2012#) AND ((テーブル1.フィールド2)="A")); でできました。 ------------------------------------------------------------ しかしVBAで ------------------------------------------------------------ Private Sub cmd_抽出_Click() Me.Form.Filter = "フィールド1 Between #" & Me.txt_始まりテキスト.Value & "# And #" & Me.txt_終わりテキスト.Value & "#" & _ "' And フィールド2 like '*" & Me.txt_フィールド2テキスト.Value & "*" & "'" Me.Form.FilterOn = True End Sub ------------------------------------------------------------ をすると、 ------------------------------ 実行時エラー3075 構文エラー:演算子がありません。 ------------------------------ になります。 どうすればいいか教えてください。 結果は、 ------------------------------ フィールド1 フィールド2 2012/01/04 A 2012/01/05 A ------------------------------ です。 ご回答よろしくお願いします。

  • NULL値を含む場合のフィルタ

    アクセスです。 テーブルに フィールド1 フィールド2 A    B       B  C       C と入ってるとします。 フィールド2についてはNULL値のレコードもあれば、 値が入ってる場合もあります。 このテーブルをフォームにひもづけていて、(帳票フォームにしています) フォームヘッダーにテキストボックス2つとコマンドボタンがあり Private Sub コマンド_Click() Me.Form.Filter = _ "フィールド1 like '*" & Me.テキスト_1.Value & "*'" & " and " _ & "フィールド2 like '*" & Me.テキスト_2.Value & "*'" Me.Form.FilterOn = True End Sub としたときに、レコードのフィールド2に文字が入ってる場合は、抽出できるのですが、 フィールド2がNULLの場合は、1件もヒットしません。 テキスト_1にはAを入れて テキスト_2には何も入れないで検索してみると、1件もヒットしませんが、 テキスト_1にBを入れて検索すると、Bのレコードが抽出されます。 もちろん テキスト_1もテキスト_2もBをいれても、Bのレコードが抽出されます。 VBAコードで & "フィールド2 like '*" & Me.テキスト_2.Value & "*'" としてるので、NULL値でも抽出されると思ったのですがなぜ何も抽出されないのでしょうか? ワイルドカードでnull値も検索されないのでしょうか? テーブルのフィールド2のデータをNull値ではなく、””にしたら、問題なく抽出されましたが データのNull値はNull値のままにして、空白などの文字には置き換えたくないです。 (というか、すべてのNULL値に空白を入れる作業が大変なのでやりたくないです。 実際のフィールド数は50個くらいあります) よろしくお願いします。

  • フィルタ後のテーブルのレコード数を取得したい

    アクセスvbaです。 フィルタ後のテーブルのレコード数を取得したいのですが Debug.Print DCount("[フィールド1]", "テーブル1") だと、フィルタ前の数が取得されてしまいます。 フォーム1にテーブル1を紐付けて、 更にフィルタをしているのですが、 元のテーブル1のレコード数が10として、 フィルタ後が3なら、3を取得するVBAコードを教えてください。

  • ACCESS2000でのテーブルの結合について

    初歩的な質問で恐縮ですが ACCESS2000を使用しテーブルの構造が(フィールド)同じもの(但し入っているデータは異なります)あります。 このテーブルは別々のまま保存した状態でクエリーでひとまとめにして表示させたいのですが 例えば テーブルAには300件 テーブルBには200件 テーブルCには100件の同一構造のデータがあった場合 クエリーDとしてA+B+Cで600件が表示されクエリーDのデータを修正した場合それぞれのテーブルのデータに反映させるようにしたいのです。 以上よろしくお願いいたします。 

  • アクセステーブルでのルックアップ条件別表示について

     いつもお世話になっております。ACCESS2016を使用しています。  お聞きしたいのは、条件によってテーブルのルックアップフィールドに表示されるデータを変えたいのですが、その方法が分かりません。  フォームでのやり方は分かりますが、テーブルで表示させたいと思っています。  例えば、下記のようなテーブルがあるとします。    「T_マスター」テーブルの地区がAのときは「T_ルックアップA」を、「T_マスター」テーブルの地区がBのときは「T_ルックアップB」を担当者に表示させて、各「T_ルックアップ」テーブルにある3番目の担当者を入力したいと考えています。  テーブルでこの表示をさせたいのですが、やり方が分かりません。  どうぞご教示くださいますようお願いいたします。

  • 抽出条件に応じてテーブルを作り分ける方法

    抽出条件テーブル(a)があり、抽出条件が参照するテーブル(b)がある。(a)には複数の抽出条件が登録され、(a)を参照しつつ、(b)から抽出されるテーブル(c)を抽出条件に応じて複数作成したい。つまり、(a)に登録された抽出条件の数だけテーブル(c)が作成される。 これをクエリで実行できる方法をご教示願いたい。 なお、(b)からデータを抽出する場合、上記の抽出条件テーブル(a)に代えて、クエリ内に抽出条件を20~30個記述する方法でも可。 Access2010を使用しています。VBAは使用しません。

  • Access 抽出条件を自動で入力したい

    お世話になります。 マクロもVBAも現在鋭意勉強中の初心者ですが、よろしくお願いします。 取引先から送られてくるテーブルの、とあるフィールドにいつも不要なデータが入っています。 作業は、その不要なデータの削除から取り掛かるのですが、これが何気にめんどくさくて 自動化できないものかと、今回、質問させていただきます。 結果として、       フィールド1 フィールド2 フィールド3 フィールド4 抽出条件        like "a*" または           like "b*"               like "c*"               like "d*"               like "e*" ↑のような状態に、マクロないしVBAを使用し、抽出条件に、上記の文字列を自動で入力することは可能なのでしょうか? また、可能ならばどのようにすればいいのでしょうか? テーブルのフィールド数は毎回違いますが、 フィールド2に不要なデータが入っているのは決まっています。 フィールド2のデータ型はテキスト型です。 Access2007を使用しています。 どうぞ、よろしくお願いします。

  • Accessのフィルタについて

    Access2002のフィルタについて質問します。 データシートで性別フィールドにはチェックを入れると「男性」チェックを入れないと「女性」というようにしています。 データシートから「フィルタ/並べ替え」で男性だけを抽出しようとしました。「レコード」「フィルタ」「フィルタ/並べ替え」で「抽出条件」に「True」と入れると男性が抽出されました。しかし「抽出条件」に「True」である「1」を入れても抽出できません。「0」を入れると「女性」が抽出できるのですが、なぜか「1」では「男性」が抽出できません。 しかし「-1」だと「男性」が抽出できました。これはなぜでしょうか? 「True」は「1」ではないのでしょうか?教えてください。

専門家に質問してみよう