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" を返却するような事はできるのでしょうか? > > お手数ですが、どなたかご回答頂ければ幸いです。 > もし不明な点等あればご指摘ください。 > > 宜しくお願い致します。