0
trips.txnPNR에 완료된 여행의 트랜잭션 ID가있는 여행 테이블이 있습니다.mySQL 최적화 LEFT JOIN
trips.id를 참조하는 driver_contacts 테이블이 있습니다.
Trips.txnPNR이 설정되었지만 driver_contacts.trip에서 해당 ID를 가진 행으로 표시되지 않는 여행이 있는지 알아야합니다.
나는이 JOIN으로이 여행을 성공적으로 찾고 있지만 분명히 매우 많은 메모리를 소비합니다.
SELECT
trips.id,
driver_contacts.trip
FROM trips
LEFT JOIN driver_contacts ON trips.id = driver_contacts.trip WHERE trips.`tripDropoff` > '2014-10-24 15:15:25'
AND driver_contacts.trip IS NULL
AND TRIM(trips.txnPNR) != ''
내 동료
SELECT
24hourTrips.id,
driver_contacts_null.trip
FROM (SELECT id,txnPNR FROM trips WHERE trips.`tripDropoff` > now() - INTERVAL 1 DAY AND
TRIM(txnPNR) != '') AS 24hourTrips
LEFT JOIN (SELECT * FROM driver_contacts where driver_contacts.trip IS NULL) AS driver_contacts_null ON 24hourTrips.id = driver_contacts_null.trip
훨씬 빠른에 변화를 추천하지만, 그 쿼리는 상관없이 driver_contacts의 행이 있는지의 모든 여행을 가져옵니다.
id가 driver_contacts.trip에없는 모든 출장 행에 대해 덜 집중적 인 조회는 어떻게됩니까?
강렬한 반대에도 불구하고 두 번째 쿼리가 문제를 해결합니까? –
@RobertHarvey - 두 번째 쿼리는 리소스를 거의 사용하지 않지만 잘못된 데이터를 반환합니다. 이미 driver_contacts 행이있는 지난 24 시간의 여행을 반환합니다. – jerrygarciuh
첫 번째 쿼리는 비용이 많이 들지만 정확합니다. – jerrygarciuh