큰 테이블 두 개에 모두 venue_id
이있는 큰 테이블이 있습니다. 두 개의 독립적 인 값이므로 외래 키가 아닙니다. 그들은 다음과 같습니다 :큰 테이블 쿼리 MySQL을 통해 두 테이블에 걸쳐 어디서나
table: activity_retail
columns: activity_id, venue_id, created_at
indexes: activity_id (PRIMARY), (activity_id, venue_id) INDEX
table: activity
columns: activity_id, item_id, venue_id, created_at
indexes: activity_id (PRIMARY), (created_at) INDEX
내가 venue_id
각 테이블에 X
에 해당하는 모든 활동, 둘 다에 걸쳐 쿼리를 수행하고 싶습니다. 그래서 내가 할 것이다 :
SELECT * from activity
LEFT JOIN activity_retail on activity_retail.activity_id = activity.activity_id
WHERE activity_retail.venue_id = X or activity.venue_id = X
ORDER BY activity_retail.created_at desc LIMIT 0, 25
나는 또한 페이지 매기기에이 쿼리를 수행해야 할 수 있습니다 :
SELECT * from activity
LEFT JOIN activity_retail on activity_retail.activity_id = activity.activity_id
WHERE activity_retail.venue_id = X or activity.venue_id = X and activity.activity_id > Y
ORDER BY activity_retail.created_at desc LIMIT 0, 25
상황이 (가) 존재하지 않을 수 activity_id
activity_retail
에, 그것은 선택 필드입니다, 그래서 내가 할 수있는 ' 내부 조인은 왼쪽 조인이어야합니다. 여기
EXPLAIN
입니다 :
1 PRIMARY activity index ix_ivi_created created_at 8 NULL 25 Using where
1 PRIMARY activity_retail eq_ref PRIMARY PRIMARY 4 activity.activity_id 1
이 (EXPLAIN
에 따라) 작은 쿼리이지만, 그것을 실행하는 데 시간이 오래 걸리고, EXTRAS
지역에 아무것도 사용하지 않습니다.
이 방법을 올바르게 수행하는 방법에 대한 조언 - 기본적으로 문을 사용하여 두 테이블에 걸쳐 WHERE
조건? AND
은 실제로 잘 작동하지만 여기에 OR
이 필요합니다.
당신이 그래서 우리는하지만 "venue_id 각 테이블에 X 같다 여기서"당신의 인덱스? 또한 – ghenghy
, 당신은 말을 볼 수있는 테이블에 설명 제공 할 수 있습니다 어떤 테이블에서 venue_id가 X와 같은지 쿼리가 이루어지고 있습니다. – ghenghy
일부 샘플 데이터와 원하는 결과가 도움이 될 것입니다. – ghenghy