programing

MySQL : 청크별로 큰 선택 항목 검색

goodcopy 2023. 9. 5. 21:33
반응형

MySQL : 청크별로 큰 선택 항목 검색

그 때 더 많이 선택했습니다.

7천만 줄

의 큰 선택한데하큰크싶저습에 저장하고 csv에다철에 합니다.win2012 R2

Q: 성능 향상을 위해 MySQL에서 데이터를 청크로 검색하는 방법은 무엇입니까?

왜냐하면 내가 하나를 저장하려고 할 때 큰 선택을 받았기 때문입니다.

메모리 부족 오류

당신은 볼수있다니습사를 해 볼 수 .LIMIT특징.이 작업을 수행할 경우:

SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000

첫 번째 1,000줄을 받게 됩니다. 번째 첫째번째.LIMIT값(0)은 결과 집합에서 시작 행을 정의합니다.인덱스가 0이므로 0은 "첫 번째 행"을 의미합니다. 번째 두번째째.LIMIT 행 .value는 파일 이름입니다.다음 몇 개의 1,000 세트를 얻으려면 다음을 수행합니다.

SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000
SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000

등등. 그때.SELECT행을 반환하지 않습니다. 완료되었습니다.

그러나 1K 행을 한 번에 처리하는 동안 테이블을 변경하면 순서가 취소되기 때문에 이것만으로는 충분하지 않습니다.시간 내에 결과를 고정하려면 결과를 임시 테이블에 쿼리하는 것으로 시작합니다.

CREATE TEMPORARY TABLE MyChunkedResult AS (
  SELECT *
  FROM MyTable
  ORDER BY whatever
);

참고: 임시 테이블이 존재하지 않는지 미리 확인하는 것이 좋습니다.

DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;

어쨌든 임시 테이블이 설치되면 행 청크를 여기서 꺼냅니다.

SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.

각 청크 후에 제한 값을 계산하고 결과의 끝을 확인하는 논리를 만드는 것은 당신에게 맡기겠습니다.저는 또한 1,000개의 레코드보다 훨씬 큰 청크를 추천합니다. 그것은 제가 공중에서 고른 숫자일 뿐입니다.

마지막으로, 작업이 끝나면 임시 테이블을 삭제하는 것이 좋습니다.

DROP TEMPORARY TABLE MyChunkedResult;

LIMIT OFFSET접근 방식은 데이터 크기가 매우 클 때 쿼리 속도를 늦춥니다.또 다른 접근 방식은 Keyset 페이지화라는 것을 사용하는 것입니다.쿼리에 고유한 ID가 필요하며, 이 ID를 책갈피로 사용하여 이전 페이지의 마지막 행을 가리킬 수 있습니다.마지막 책갈피를 사용하여 다음 페이지를 가져옵니다.예를 들어:

SELECT user_id, name, date_created
FROM users
WHERE user_id > 0
ORDER BY user_id ASC
LIMIT 10 000;

, " " " " " " " " " " " "user_id~하듯이12345 때 사용할 수

SELECT user_id, name, date_created
FROM users
WHERE user_id > 12345
ORDER BY user_id ASC
LIMIT 10 000;

자세한 내용은 이 페이지를 참조하십시오.

대규모 데이터 집합에 또 데이터를 새 테이블이 아님)에 출을청크필력대데모규세이터에트임대에또필데이한사다터쿼포관데아새테만테함된련음한는리용하이이님터를블시이이블요다방접은한근식른할요해러를하위피기를 하는 것입니다.mysqldump파일로 내보내기를 처리합니다.

다음을 사용하여 버퍼링되지 않은 결과 집합 사용MYSQLI_USE_RESULT데이터베이스를 읽고 CSV 파일 행에 대한 쓰기 출력과 같은 기능을 수행할 수 있습니다.

간단히 말해서:데이터베이스에서 읽는 동안 CSV/파일에 씁니다.

사용 시mysqli_query사용합니다.MYSQLI_USE_STORE기본적으로 전체 데이터베이스를 읽고 과도한 메모리 사용을 유발하는 결과 집합을 가져옵니다.

자세한 내용은 이 문서를 참조하십시오.MYSQLI_USE_RESULT기능이 실행되는 동안 데이터베이스에서 다른 작업/작업을 수행하지 못할 수 있으므로 주의하십시오.

언급URL : https://stackoverflow.com/questions/34180448/mysql-retrieve-a-large-select-by-chunks

반응형