我有两个表 item 和 items_sellers,每个项目都可以在多个卖家中使用。
在这里,我从另一种方式获取 ItemId、sellerId 的映射,现在我需要所有这些项目的详细信息。我得到至少 5000 个键(sellerId)值(itemId)对,通过使用这张地图,我需要从这两个表中获取详细信息。
为了得到结果在这里我使用了下面的查询:
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 个字符?查询有字数限制吗?