初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2013-10-13 10:13:23

Gajiro
Member

クエリが遅すぎるので改善したい

Win7 FilemakerPro11利用です。
レコードが30万件ほどあります。

対象レコードの絞り込みでレコードを検索しているのですが、クエリが1分ほどかかります。
あまりにも時間がかかっていて効率が非常に悪いのですが、改善方法はわかりません。

ホストのパソコンのスペックは悪くはないと思います。

なにか改善方法あればご教授お願い致します。

Offline

#2 2013-10-13 10:34:43

traveler
Guest

Re: クエリが遅すぎるので改善したい

索引が非保存なのでは?

#3 2013-10-13 10:40:22

Shin
Member

Re: クエリが遅すぎるので改善したい

ホストは、FMPですか、FMSですか。
また、ファイルの構造も重要で、その対象のフィールドは計算フィールドでしょうか。

Offline

#4 2013-10-13 11:40:00

Gajiro
Member

Re: クエリが遅すぎるので改善したい

ホストはFMSです。
フィールドは全てテキストです。

索引が非保存かどうかは分からないですが、フィールドのオプションを開くと索引設定「最小限」で「必要時に索引を自動設定」となっています。
索引設定とはどのように使うのでしょうか?

Offline

#5 2013-10-13 16:28:58

Shin
Member

Re: クエリが遅すぎるので改善したい

その索引条件は、索引を作成した後、ファイルが閉じられた時に破棄されます。
索引の作成条件を「全て」に変更してみて下さい。この変更は、通常作業として検索するフィールド全てに行われると効果的ですが、ファイルの容量が増加します。
また、リレーションのキーとして参照されるフィールドや、値一覧の対象となるフィールドにも、この設定は必須です。
http://www.filemaker.co.jp/11help/html/ … tml#346316

Offline

#6 2013-10-13 23:43:15

Gajiro
Member

Re: クエリが遅すぎるので改善したい

検索条件が対象のフィールドを最小限 → 全て に変更しましたが大してクエリ時間が速くなりません。
なにか他に原因があるのでしょうか?

よろしくお願い致します。

Offline

#7 2013-10-14 09:06:17

狐猫
Guest

Re: クエリが遅すぎるので改善したい

検索条件にワイルドカードを使ってると索引が無効ですが…

#8 2013-10-14 09:09:28

狐猫
Guest

Re: クエリが遅すぎるので改善したい

あ。
「対象レコードの絞り込みで」がいけないのでは。
検索実行でやってみたら。

#9 2013-10-14 18:11:52

Shin
Member

Re: クエリが遅すぎるので改善したい

具体的に、どのようなデータが入っていて、どのようなキーワードで検索しているのですか。
対象フィールドに長文が入っているのでしたら、どのような方法でも高速に、というのは無理かも。
逆に、フィールドの値との完全一致でしたら、他に対処方法が有ります。

Offline

#10 2013-10-14 23:54:47

Gajiro
Member

Re: クエリが遅すぎるので改善したい

13項目あって12項目がフィールドの値と完全一致です。
一つだけ テーブル①::フィールドA:[>""] となっております。
長文は一切ありません。

多くても4文字でほぼ2~3文字です。

よろしくお願い致します。

Last edited by Gajiro (2013-10-14 23:55:46)

Offline

#11 2013-10-15 00:12:42

Gajiro
Member

Re: クエリが遅すぎるので改善したい

検索条件を指定

処理              条件
レコードを対象外に  テーブル①::フィールドA:[NG]
レコードを対象外に  テーブル②::フィールドA:[拒否]
レコードを対象外に  テーブル②::フィールドA:[会社]
レコードを対象外に  テーブル②::フィールドA:[アポ禁]
レコードを対象外に  テーブル②::フィールドA:[料金]
レコードを対象外に  テーブル②::フィールドA:[PC無]
レコードを対象外に  テーブル②::フィールドA:[現アナ]
レコードを対象外に  テーブル②::フィールドA:[受注]
レコードを対象外に  テーブル②::フィールドA:[工事NG]
レコードを対象外に  テーブル②::フィールドA:[未接続]
レコードを対象外に  テーブル③::フィールドA:[>””]
レコードを対象外に  テーブル④::フィールドA:[未提供]
レコードを対象外に  テーブル⑤::フィールドA:[-]

このような形で使っております。

よろしくお願い致します。

Last edited by Gajiro (2013-10-15 00:13:05)

Offline

#12 2013-10-15 02:50:25

Shin
Member

Re: クエリが遅すぎるので改善したい

3テーブル以上をまたいでいますね。この検索は、早くしようがありません。
2テーブル以下にまとめられませんか。

Offline

#13 2013-10-15 09:07:56

Gajiro
Member

Re: クエリが遅すぎるので改善したい

テーブル数を少なくしたら速くなるのですかね。
2テーブルくらいならまとめられそうですが、そのあとどのようにしたらよろしいでしょうか?

Offline

#14 2013-10-15 09:35:45

tatitute
Guest

Re: クエリが遅すぎるので改善したい

現状で、テーブル1と2だけで検索してみたら。

#15 2013-10-15 09:38:20

チポ
Member

Re: クエリが遅すぎるので改善したい

その検索条件が一定のものなら、
検索した対象レコードにフラグを付けて
以後はそのフラグを検索すれば格段に速くなるでしょう。

新規レコードや、レコード編集のたびにそのフラグを入力し直すことが必要です。
これはスクリプトで自動化できるでしょう。

Offline

#16 2013-10-15 10:19:48

Shin
Member

Re: クエリが遅すぎるので改善したい

対象外抽出は、対象抽出より時間がかかりますので、避けられる限り変更したほうがいいでしょう。
とりあえず、
レコードを対象外に  テーブル③::フィールドA:[>””]
を、
レコードを対象に  テーブル③::フィールドA:[=]
に変更してみましょう。
それと、
テーブル②::フィールドAの対象外にするデータをフィルターしたフィールド
FilterValue[ テーブル②::フィールドA ;List ( "拒否" ; "会社".... )]
を作り、そのフィールドが空白なものを検索対象にすれば少しは早くなるでしょう。

2テーブルで大量データを抽出するには、例えば、
レコードを対象外に  テーブル①::フィールドA:[NG]
レコードを対象外に  テーブル②::フィールドA:[拒否]
という条件でしたら、
レイアウトを変更[テーブル1のレイアウト]
レコードを対象外に  テーブル①::フィールドA:[NG]
関連レコードへ移動[対象レコードのみを対象、テーブル2のレイアウト]
検索条件で絞り込み[レコードを対象外に  テーブル②::フィールドA:[拒否]]
という方法で行うと早くなることもあります。

Last edited by Shin (2013-10-15 10:25:28)

Offline

#17 2013-10-15 12:54:14

Gajiro
Member

Re: クエリが遅すぎるので改善したい

すいません。
一つだけ計算フィールドがあってそれを削除して検証したら数段に速くなりました。
テーブル①::フィールドA:[NG] のフィールドです。

このフィールドはテーブル①::電話番号フィールドとテーブル④::電話番号フィールドが一致した場合、フィールド①::フィールドAを[NG]とする計算にしております。
これを計算フィールドにせずにする方法なんかはあるのでしょうか?

よろしくお願い致します。

Offline

#18 2013-10-15 13:19:08

Gajiro
Member

Re: クエリが遅すぎるので改善したい

Shinさま

テーブル②::フィールドAの対象外にするデータをフィルターしたフィールド
FilterValue[ テーブル②::フィールドA ;List ( "拒否" ; "会社".... )]
を作り、そのフィールドが空白なものを検索対象にすれば少しは早くなるでしょう。

とありますが、これは計算フィールドを用いてやる方法ですか?
計算フィールドを用いるとクエリが明らかに遅くなるようですが、計算フィールドを用いて行う方法はございますでしょうか?

よろしくお願い致します。

Offline

#19 2013-10-15 13:35:32

tatitute
Guest

Re: クエリが遅すぎるので改善したい

計算フィールドを用いるとクエリが明らかに遅くなる

そうではなく、計算式がテーブルをまたがってるから計算結果が非保存(索引がない)なのです。

#20 2013-10-15 14:43:48

Shin
Member

Re: クエリが遅すぎるので改善したい

違うテーブルにあるデータを比較しているので、普通の方法では鈍足になり、どうしようもありません。

上にも書いている方法の応用ですが、
現在のテーブル1とテーブル4のリレーションと別に、電話フィールドを加えた別リレーションを張っておきます。
そのリレーションを使って、テーブル1のレコードを全表示にし、関連レコードへ移動、でテーブル4へ移ります。その対象レコードから、関連レコードへ移動、でテーブル2へ移ります。
一応、これで
レコードを対象に  テーブル①::フィールドA:[NG]ではない
の検索が出来ます。
その対象レコードの中で、その他の検索を、対象レコードの絞り込みで行えば良いはずです。(空欄同士や対象レコードの不在で、稀に、結果が異なる事が有ります)

上の検索条件で少々気になっているのですが、全て同じフィールドなのですか。

Last edited by Shin (2013-10-15 16:29:27)

Offline

#21 2013-10-15 19:31:26

Gajiro
Member

Re: クエリが遅すぎるので改善したい

もともと全てのテーブルは電話番号でリレーションを組んでいるのですが、さらにリレーションを組むのですかね?

処理              条件
レコードを対象外に  テーブル①::フィールドA:[NG]
レコードを対象外に  テーブル②::フィールドB:[拒否]
レコードを対象外に  テーブル②::フィールドB:[会社]
レコードを対象外に  テーブル②::フィールドB:[アポ禁]
レコードを対象外に  テーブル②::フィールドB:[料金]
レコードを対象外に  テーブル②::フィールドB:[PC無]
レコードを対象外に  テーブル②::フィールドB:[現アナ]
レコードを対象外に  テーブル②::フィールドB:[受注]
レコードを対象外に  テーブル②::フィールドB:[工事NG]
レコードを対象外に  テーブル②::フィールドB:[未接続]
レコードを対象外に  テーブル③::フィールドC:[>””]
レコードを対象外に  テーブル④::フィールドD:[未提供]
レコードを対象外に  テーブル④::フィールドE:[-]

わかりづらいくてすいません。
テーブル②::フィールドBだけが同じであとはすべて違うフィールドになります。

Offline

#22 2013-10-15 23:19:11

Shin
Member

Re: クエリが遅すぎるので改善したい

全体のリレーション関係についての説明は初めてですよね。
テーブルの構成とリレーション関係を最初に書いて頂かないと、話が進まないのです。

もともと全てのテーブルは電話番号でリレーションを組んでいるのですが

という説明でしたら、

このフィールドはテーブル①::電話番号フィールドとテーブル④::電話番号フィールドが一致した場合、フィールド①::フィールドAを[NG]とする計算にしております。

は不要、というか、話が矛盾しませんか。
テーブル1は、テーブル2を介して、テーブル4とリレーション関係ですよね。電話番号でリレーションしているのでしたら、電話番号は完全一致していないとリレーション関係にならないのですが。

Offline

#23 2013-10-17 13:50:39

tatitute
Guest

Re: クエリが遅すぎるので改善したい

1から直接2~4にリレーション、では。

Aは「4に関連レコードがあったら[NG]」という意味だと思うけど、そうすると4の検索は不要ということに。

#24 2013-10-18 21:43:31

Gajiro
Member

Re: クエリが遅すぎるので改善したい

すいません。
途中で分からなくなってしましました。

とりあえず、検索条件が対象のフィールドを最小限 → 全て と除外の反対の検索で少し速くなったそうです。

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

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 8 queries executed - Memory usage: 574.19 KiB (Peak: 595.09 KiB) ]