SELECT item.id FROM item JOIN attribute AS attribute_2 ON item.id = attribute_2.item_id AND attribute_2.metainfo_id = 1 AND attribute_2.value LIKE '%white%' JOIN attribute AS attribute_3 ON item.id = attribute_3.item_id AND attribute_3.metainfo_id = 5 AND attribute_3.value LIKE '%올드%'
안녕하세요. DB 초보 백엔드 개발자입니다.
위 쿼리를 실행하면 2초 정도 걸립니다. 하지만 attribute_2이나 attribute_3의 like연산을 하나라도 빼면 0.1~0.3초안에 처리가 완료됩니다.
어떤 원인때문에 저런현상이 발생하는지 전혀 감이 잡히지 않습니다. ㅜㅜ
알고 계신 고수분이 있으시다면 한번 들여다 보고 답변 부탁드립니다.
* 추가적으로 데이터베이스는 postgresql 14를 사용하고 있습니다!!
-- 그러면 item 테이블을 굳이 조인할 필요가 없어 보이네요. -- 혹시 LIKE 가 문제라면? 다른 함수로 대체 가능합니다. -- STRPOS(value, 'white') > 0 SELECT item_id FROM attribute WHERE (metainfo_id = 1 AND value LIKE '%white%') OR (metainfo_id = 5 AND value LIKE '%올드%') GROUP BY item_id HAVING COUNT(*) = 2 ; SELECT item_id FROM attribute WHERE metainfo_id = 1 AND value LIKE '%white%' INTERSECT SELECT item_id FROM attribute WHERE metainfo_id = 5 AND value LIKE '%올드%' ;