過去の桐井戸端BBS (桐ver.8)
4790 共有更新時の索引について 初心者 2000/02/20-16:08
今日、ここの過去記事をぶらぶらと読んでました。
その中で、共有更新時は索引が効かないという記事を見ました。
恥ずかしい事に知らなかった。
非常に困った・・・。

開始イベントで**マスタを多重化して、(共有更新で)
1.番号順
2.フリガナ順
3.分類順
のように多重にオープンして並べ替えをあらかじめ
しておいて入力を開始させようかと考えている次第です。

以上の状態で並べ替えしている項目での検索スピード
早いのでしょうか? 
4792 Re:共有更新時の索引について 初心者 2000/02/20-18:42
記事番号4790へのコメント
失礼しました。
無理みたいですね。これじゃ、共有は使えないですね。
dos版と同じ手法に戻さないと・・・無理かなぁ。
今ごろ、気づくなんてトホホ
(今は、テスト中でデータが小なんで)
レコードロックになって喜んでいたのにこれじゃ
あんまり意味がないような・・・。

これは(共有索引?)いつ改良予定なんでしょうか?


4794 共有更新時の索引は 佐田 守弘 2000/02/20-23:09
記事番号4792へのコメント
●表の共有更新時の整列索引の自動保守は難しいのでは
共有更新時の索引ですが、これは不可能でないにしても、技術的にはかなりハードルが高い気がします。
共有更新ですから、複数のユーザーが複数の状態で1つの表を更新しているわけで、果たして1つの索引で賄えるの
かどうかが疑問ですね。現在でも、絞り込みなどを行うと、元の索引が無効になります。なぜなら、絞り込み状態の表
(内部的にその様な表が作られるはず)は、元の表とはレコード数が違いますから、元の索引俳味を持ちません。
結局、絞り込み状態でその時だけの索引を一時的に作るしかない訳ですね。
同様の事が、共有更新状態で発生すると思います。レコードと同様に索引情報も絞り込み状態を作れれば良いわけ
ですが、それが可能なのかどうかは分かりません。おそらく通常の手法では難しいのではないでしょうか。
索引を並べ替えたり絞り込むための索引が別に必要になったりして。

もう1つ、桐の便利さが足かせになっているのではないかという気がします。桐の並べ替えは索引を使って、
並べ替え状態を作り出しているだけです。ですから、解除すれば元に戻ります。
他のDBの様に実データの直接的な並べ替えを行う仕様の方が、楽だと思うのですが。

●共有更新時の索引
表直接アクセスするのではなく、1つの表を対象とした結合表を作り、この結合表に対してアクセスしてみたら
どうでしょうか。
結合表には結合時に並べ替えの指定ができます。この指定によって、その結合表専用の索引が内部的に作られる
のではないかと思います。
言い換えれば、桐独特の表ベースで操作するのを止めて、Access風に全てクエリーベースで操作するといった考えて
行ってみてはどうでしょうか。

佐田守弘(KS-00119)
4797 Re:共有更新時の索引について MIT 2000/02/20-23:57
記事番号4792へのコメント
初心者さん
桐などのファイル共有型DBで索引を共有としたものは索引が破損しやすいようで
他のそういったDBでは何度か経験したことがあります。

索引と並べ替えは似ている感じですが,検索方法は異なっているのだと思います。
索引では本の目次を作って,検索する時は目次で該当頁を調べてその頁を開きます。
並べ替えでは確かに指定項目で並んでいますが,目次が無いので1頁ずつ頁をめくって
該当を探す検索になっていると考えられます。

共有テーブルで検索速度を上げたい時

*索引を作らない
共有する表はテーブルサイズを大きくしない為なるべく
索引を作らないようにします。

*表を分ける
更新する可能性で表を分けたり,入力頻度の低い項目は
1対1の関係でその項目は別の表にします。

*検索方向を指定
上下いずれの方向から検索したら早いかが把握できるのであれば現在行を先頭行あるいは
最終行に移動してから検索開始します。

などの方法を私は取っています。なお,これ以外にも良いアイデアがあると思いますので,
また皆様のご発言を期待しています。MIT

4806 どうもうまくいきません 初心者 2000/02/21-21:09
記事番号4794へのコメント
佐田さん、MITさん、どうもありがとうございます。

>●共有更新時の索引
>表直接アクセスするのではなく、1つの表を対象とした結合表を作り、この結合表に対してアクセスしてみたらどうでし
>ょうか。
>結合表には結合時に並べ替えの指定ができます。この指定によって、その結合表専用の索引が内部的に作られる
>のではないかと思います。
>言い換えれば、桐独特の表ベースで操作するのを止めて、Access風に全てクエリーベースで操作するといった考えて
>行ってみてはどうでしょうか。

上の方法をやってみました。
1つの表を対象に結合表を作成し、並べ替えの項目を指定する
だけですよねー?
どうもうまくならないんですけど・・・。

索引を作ると、データが何万件あっても、その項目での検索
は一瞬で終わりますよね。これをしたいのですが、
上のようにして検索してみましたが時間かかります。

すいません、アクセスは分かりません。
結合表もv8になって、最近はじめました。
使用方法を模索中です。

戻る