SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")
括弧内に約500,000の値を持つ上記のようなクエリを持っています。MySQLクエリ "IN" 500,000レコード
より良い検索方法がありますか?この方法は非常に面倒である/遅いです。
SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")
括弧内に約500,000の値を持つ上記のようなクエリを持っています。MySQLクエリ "IN" 500,000レコード
より良い検索方法がありますか?この方法は非常に面倒である/遅いです。
500,000の値を別のテーブルに入れて、それに結合します。
SELECT t.value
FROM table t
INNER JOIN NewTempTable n
ON t.id = n.id
あなたはmysqlパケットサイズ制限(16MB)に近づいているので、確かに悪い考えです。
このソースから、あなたは50万IDを持っていますか?それらをデータベースに保存して結合を実行できませんでしたか?
あなたが行うことができ、以下:
ステップ01:あなたはlookup_ids
ステップ03にすべての50万値を挿入します:IDのテーブルが
DROP TABLE IF EXISTS lookup_ids;
CREATE TABLE lookup_ids SELECT id FROM `table` WHERE 1=2;
ALTER TABLE lookup_ids ADD PRIMARY KEY (id);
ステップ02作るまともにしますカバーインデックス:table
ALTER TABLE `table` ADD UNIQUE INDEX id_value_ndx (id,value);
ステップ04:電子
SELECT t.value FROM `table` t INNER JOIN lookup_ids i USING (id);
または
SELECT t.value FROM `table` t NATURAL JOIN lookup_ids i;
を登録しようCAVEAT:あなたは、ルックアップIDの異なるセットを持っていない限り、手順1〜3を使用すると、500Kのidを取得しましたか
をロードするために繰り返される必要がありません?別のクエリからですか?または、アプリケーションコードのいくつかのリストにありますか? –
これらの500,000アイテムはどこから来たのですか?それらがDB内で発生した場合、あなたは 'join'することができます。ユーザーが500,000の値を入力すると想像するのは難しいです:-) – drdwilcox
MySQLにないデータのリストから。私はこのデータを追加してJOINを行うことができると思います。それはより速いでしょうか? – reefine