5

ここに私のシナリオがあります:

プログラミング言語: Java

MYSQLは約100,000,000のエントリを持つデータベースを持っています。

私は、メモリ内valueListに約 10,000 エントリの値のリストを持っています。

valueListこのリストの各値がデータベースに一致するかどうかを繰り返して確認したいと思います。

これは、少なくとも 10,000 回のデータベース呼び出しを行う必要があることを意味し、これは私のアプリケーションにとって非常に非効率的です。もう 1 つの方法は、データベース全体を一度メモリにロードしてから、メモリ自体で比較を行うことです。これは高速ですが、大量のメモリが必要です。

この問題に対するより良いアプローチを提案していただけますか?

編集 :

valueList が次のような値で構成されているとします。 {"New","York","Brazil","Detroit"}

データベースから、 と に一致するものを見つけBrazilますDetroit。ただし、Newandは一致しYorkませんでした。New Yorkしたがって、次のステップは、一致しない値が残っている場合は、それらを組み合わせて一致するかどうかを確認することです。したがって、この場合、結合NewYorkてから一致を見つけます。

私が前に行っていたアプローチ(1つずつデータベース呼び出し)では、これが可能でした。ただし、一時テーブルを作成するアプローチの場合、これは不可能です

4

1 に答える 1

7

このような単一の挿入で一時テーブルに10kレコードを挿入できます

insert into tmp_table (id_col)
values (1),
       (3),
       ...
       (7);

次に、2 つのテーブルを結合して、目的の結果を取得します。

あなたのテーブル構造はわかりませんが、次のようになる可能性があります

select s.* 
from some_table s
inner join tmp_table t on t.id_col = s.id
于 2013-10-08T06:44:58.100 に答える