2つのテーブルitemとitems_sellersがあり、各アイテムは複数のセラーで利用できます。
ここで、別の手段からItemId、sellerIdのマッピングを取得します。ここで、これらすべてのアイテムの詳細が必要です。少なくとも5000のkey(sellerId)value(itemId)ペアを取得します。このマップを使用して、これら2つのテーブルから詳細を取得する必要があります。
結果を取得するにはここで私は以下のクエリを使用しました:
SELECT
table1.column1,
table1.column2,
table1.column3,
table2.column1,
table2.column2
FROM
item as table1
INNER JOIN (
select
key1 as ITEMID,
value1 as SELLERID
UNION ALL
select
key2,
value2
UNION ALL
select
key3 ,
value3
UNION ALL
select
key4 ,
value4
UNION ALL
// ....5000 key value
pairs
) as KEY_VALUE
ON table1.item_id = KEY_VALUE.ITEMID
INNER JOIN
item_sellers as table2
ON table1.item_id = table2.item_id
AND table2.seller_id = KEY_VALUE.SELLERID
WHERE table1.active = 1
このクエリは、3000〜4000のUNION ALLステートメントでは完全に正常に実行されますが、5000以上のキーと値のペア(5000以上のUNION ALLステートメント)ではエラー、つまりメモリ不足例外/クエリタイムアウト例外が発生します。
このクエリに問題はありますか?もしそうなら、それにいくつかの光を通してお願いしますか?
このクエリを最適化する方法はありますか?
PS:このクエリに5000個のキーと値のペアをすべて入力すると、クエリ文字は209950文字になりますか?クエリの文字数に制限はありますか?