[Ludia-users 180] Re: 検索結果のソート順について

Zurück zum Archiv-Index

kousa****@nttda***** kousa****@nttda*****
2008年 1月 18日 (金) 09:43:22 JST


幸坂です。こんにちは。

> ludiaで"@@"検索した時に、先にDBに挿入したデータから検索結果
> が表示される?と思われる動作を利用して、アプリを構築していま
> す。
上記の動作を利用してアプリを構築すると、Ludia以外でも問題が起きそうで
す・・・。
RDBMSは行の順番を全く保証しないので。
http://www.postgresql.jp/document/pg826doc/html/tutorial-concepts.html

> データが数百万件を超える状態、
> set ludia.max_n_sort_result TO 1
> ORDER BY ID を指定しない
> の時に、"New York 1" を返却するような事はできるのでしょうか?
残念ながらできません。
ある程度インデックスが大きくなると、
インデックス内部で配置換えが行われるため、
松風さんのような事象が起きていると考えられます。

# このMLはWeb公開されています。
# http://lists.sourceforge.jp/mailman/archives/ludia-users/
# 住所などが晒されていますが大丈夫ですか? 

> -----Original Message-----
> From: ludia****@lists***** 
> [mailto:ludia****@lists*****] On Behalf Of 松風 敬
> Sent: Wednesday, January 16, 2008 11:40 AM
> To: ludia****@lists*****
> Subject: [Ludia-users 177]検索結果のソート順について
> 
> はじめまして、松風と申します。
> 
> 現在、仕事でludiaを使用しているのですが、
> 検索結果のソート順について確認させて頂ければと思います。
> 
> ■確認内容
> 
> ludiaで"@@"検索した時に、先にDBに挿入したデータから検索結果
> が表示される?と思われる動作を利用して、アプリを構築していま
> す。
> ※これは必須条件とさせてください。
> 
> しかし、DBのデータ件数が数百万件を超えると、この
> 
> "先にDBに挿入したデータから検索結果が表示される"
> 
> の法則が使えなくなるようなので、確認させてください。
> 
> ■詳細
> 
> あるDBに、以下のように、address長さが短い順にINSERT文で入
> れていきます。
> 
> ID |    address
> ----------------------
> 1  | New York 1
> 2  | New York 12
> 3  | New York 123
> 4  | New York 1234
>      :
>      :
> 
> ※ DDL
>  CREATE TABLE tbl (
>      id             serial primary key,
>      txt            text
>  );
>  CREATE INDEX idx ON tbl USING fulltext (txt);
> 
> ソート件数を以下のように1件に設定しておき、
> 
> set ludia.max_n_sort_result TO 1
>  
> 上記状態において
> 
> select * from tbl where txt @@ 'New';
> 
> を実行すると、
> 
> ID  |   txt
> ------------
> 1   | New York 1
> (1 row)
> 
> のようにIDが一番小さい値(先にソートしたもの)が通常返却され
> ます。
> 
> しかし、これがデータ数が数百万件を挿入した後に実行すると
> 
> ID    |   txt
> ------------
> 79... | New York 1234....
> (1 row)
> 
> のように、"New York 1"ではないほかの値が返ってくるようです。
> ※数十万件程度の件数であれば、"New York 1"が返ってくるようです
> 
> データ数が数百万件を超えても、"New York 1"を返却するように
> したいため、
> 
> set ludia.max_n_sort_result TO 1000000
> 
> などとmax_n_sort_resultを大きくしたり、ORDER BY ID を指定
> すると、"New York 1"を返却してくれるのですが、速度パフォー
> マンスが落ちてしまいます。
> 
> ■確認
> 
> データが数百万件を超える状態、
> set ludia.max_n_sort_result TO 1
> ORDER BY ID を指定しない
> 
> の時に、"New York 1" を返却するような事はできるのでしょうか?
> 
> お手数ですが、どなたかご回答頂ければ幸いです。
> もし不明な点等あればご指摘ください。
> 
> 宜しくお願い致します。




Ludia-users メーリングリストの案内
Zurück zum Archiv-Index