松風 敬
shohu****@kvd*****
2008年 1月 16日 (水) 11:39:38 JST
はじめまして、松風と申します。 現在、仕事で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" を返却するような事はできるのでしょうか? お手数ですが、どなたかご回答頂ければ幸いです。 もし不明な点等あればご指摘ください。 宜しくお願い致します。 /*************************************************/ Postcode : Address : TEL : Name : 松風 敬 Mail : shohu****@kvd***** Blog : http://d.hatena.ne.jp/shohu33/ /*************************************************/