1

mainとdeltaの2つのインデックスを持つSphinxインスタンスがあります。デルタインデックスは、最後のマージ後に変更されたドキュメントを選択しています。これには、新しいIDを持つドキュメントと既存のIDを持つドキュメントが含まれます。

一般的なアプローチに従って、範囲クエリ(ドキュメントからの最小IDと最大ID、および1000レコードのステップ)を作成しました。このアプローチの問題は、100万のドキュメントを含むデータベースでは、範囲クエリがIDの全範囲をカバーするため、何も返さないクエリが大量に発生することです。すなわち:

sql_query_range = SELECT MIN(id),MAX(id) FROM documents
sql_range_step = 1000
sql_query = SELECT * FROM documents where modified_date > (select merge_date from SphinxTable)
WHERE id>=$start AND id<=$end

インデクサーがデータベース全体ではなく、変更されたレコードのみを反復処理するように、SQL範囲クエリを定義する方法はありますか?(cの範囲が短くなるため、実行するクエリが少なくなります)

4

1 に答える 1

2

あなたの他の質問への私の回答で述べたように、次のようなことをします

sql_query_range   = SELECT (SELECT maxID from SphinxTable),MAX(id) FROM documents
于 2012-09-13T16:51:01.470 に答える