아래 쿼리는 훌륭하지만 느립니다. 약 7500 개의 행이있는 테이블에서 실행하려면 약 30 초가 걸립니다. 어떻게 속도를 낼 수 있을까요?5 개 필드 중 3 개가 공통적으로있는 행을 찾습니다 - 쿼리 속도를 높이는 방법?
목표는 동일한 테이블에서 "거의 중복"행을 찾는 것입니다. 일치하는 5 개의 필드 중 3 개가 있으면 우리는 명중했습니다.
SELECT
originalTable.id,
originalTable.lastname,
originalTable.firstname,
originalTable.address,
originalTable.city,
originalTable.email
FROM
address as originalTable,
address as compareTable
WHERE
# do not find the same record
originalTable.id != compareTable.id and
# at least 3 out of those 5 should match
(originalTable.firstname = compareTable.firstname) +
(originalTable.lastname = compareTable.lastname) +
(originalTable.address = compareTable.address and originalTable.address != '') +
(originalTable.city = compareTable.city and originalTable.city != '') +
(originalTable.email = compareTable.email and originalTable.email != '')
>= 3
GROUP BY
originalTable.id
ORDER BY
originalTable.lastname asc,
originalTable.firstname asc,
originalTable.city asc
모든 최적화 힌트를 주셔서 감사합니다.
이 메이크업 감각'originalTable.id! = compareTable.id'을) ... 단지 목적을 미리보기 위해 "등 MatchFirstName, MatchLastName, MatchCity,"모든 열을 얻을? – ajreal
예. 이것 없이는 레코드 200을 레코드 200과 비교하기 때문에 모든 레코드를 찾지 만 ... 오오 ... 궁금해! :) – sprain
내 사랑, 당신은 행의 크기가'7500 x 7499 = 56242500'이라는 잘못된 조건으로 데카르트 제품을 만들려고 할 수 있습니다 ... – ajreal