큰 테이블 (두 개의 열을 선택하면 3m + 행, 결과 집합은 약 6-7m)에서 두 개의 열을 선택하는 쿼리를 실행하고 목록을 반환해야합니다. 그래서 저는 열을 목록에 병합하고 중복을 제거하기 위해 연합을 사용했습니다. 문제는 하나의 쿼리에서 결과를 반환 할 수 없다는 것입니다. 따라서이를 분할해야하므로 응용 프로그램 계층이 Prepared Statements를 통해 설정하는 하위 쿼리에 LIMIT ?,?
을 적용했습니다.합집합 전에 중복을 제거하십시오.
SELECT val
FROM
(
(SELECT fs.smr as val
FROM `fr_search` as fs
ORDER BY val LIMIT ?,?)
UNION
(SELECT fs.dmr as val
FROM `fr_search` as fs
ORDER BY val LIMIT ?,?)
) as vals
GROUP BY val
문제 : 노동 조합은 중복을 제거하지만 LIMIT를 적용한 후에 만 적용됩니다. 의미 두 개의 쿼리가 100 + 100 = 200 행을 반환하고 그 중 대부분이 복제본 인 경우 < 개의 200 행만 반환합니다. 이러한 쿼리에 제한을 적용하여 특정 양의 행을 반환 할 수있는 방법은 무엇입니까? (필자는 서브 쿼리 후 LIMIT를 적용하는 경우, 그것은 실행하는 데 2 분 이상 걸릴 것입니다, 그래서 그것은 문제가 해결되지 않습니다.)
'SELECT DISTINCT ... ' – Psi
@Psi'DISTINCT '를 사용하면 무엇을 얻을 수 있습니까? 'union all' 대신에'Union'을 사용할 때와 마찬가지로, 문제는 지속됩니다. – appl3r
왜 GROUP BY가 있습니까? –