두 개의 테이블 item 및 items_sellers가 있으며 각 항목은 둘 이상의 판매자에서 사용할 수 있습니다.메모리 부족 및 Mysql 쿼리의 시간 초과 Join 및 Union All 문이 있음
여기서 ItemId, sellerId의 매핑을 다른 방법으로 얻습니다. 이제 모든 항목에 대한 세부 정보가 필요합니다. 적어도 5000 개의 key (sellerId) 값 (itemId) 쌍을 얻습니다.이 두 테이블에서 세부 정보를 가져와야하는이 맵을 사용합니다. 4000 UNION ALL 문하지만 5000 메모리 예외 밖으로 즉, 예외를/쿼리 시간을 오류를 제공 -
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에 완벽하게 확실히 실행 :
내가 쿼리 아래 사용 여기에 결과를 얻으려면 키값 쌍, 즉 5000+ UNION ALL 문.이 쿼리에 문제가 있습니까? 그렇다면 약간의 빛을 비추어주십시오.
이 쿼리를 최적화하는 방법이 있습니까?
추 신 :이 쿼리에 5000 개의 키 값 쌍을 모두 넣으면 쿼리 문자는 209950 자가됩니까? 검색어에 글자 수 제한이 있습니까?
이 쿼리의 목적은 무엇입니까? 그것은 매우 나쁘고 재 작성되어야하지만 처음부터 무엇을해야하는지 모른다. – S3Mi
상품 및 판매자 정보가 필요합니다. 상품 ID 및 판매자 ID와 그 매핑, 즉 키 값 쌍지도의 묶음이 전부입니다. 쿼리를 다시 작성하는 방법을 제안 해 주시겠습니까? – Ranjith