2011-03-15 2 views
2

커다란 MySQL 테이블 (약 7 억 5 천만 행)을 가지고 있으며 몇 개의 열을 추출하려고합니다.쿼리가 완료되기 전에 MySQL이 결과를 출력하도록 할 수 있습니까?

SELECT id, delid FROM tbl_name; 

조인 또는 선택 기준 또는 기타가 없습니다. 두 필드 모두에 대한 색인이 있습니다 (별도).

원칙적으로 테이블을 읽고 값을 즉시 내뱉기 시작할 수 있지만 실제로는 전체 시스템이 메모리를 씹어 서 기본적으로 중단됩니다.

그것은 전체 쿼리가 실행되고 모든 출력이 생성되기 전에 출력이 어딘가에 저장되는 것처럼

나는 등 캐시를 해제, unbuffering에 검색 한 ... 보이지만, 바로 답을 찾을 수 없습니다.

+0

:

나는 다음 당신이 무엇을 원하는에 가까운 생각하십니까? 이 열에 저장되는 항목과 저장 유형은 무엇입니까? DB 서버에 램이 얼마나 있습니까? 얼마나 많은 램/프로세싱 언어가 쓰여지는 언어인가? – P4ul

+0

(UNIX 정렬을 사용하여) 중복을 제거하고 다시 다른 테이블에 넣습니다. 서버에는 4Gb RAM 만 있지만 출력하기 전에 전체 출력을 저장해야한다는 요구 사항이 없으면 RAM이 필요한 이유를 알 수 없습니다. –

답변

3

당신이 load data infileselect into 봤어 귀하의 경우에 sollution 경우 몰라? 당신이 2 열 750million 행이 일을 계획입니까

select id,delid 
    into outfile 'C:\\ronnis.csv' 
     fields terminated by ',' 
    from tbl_name; 

<perform unix sort> 

load data infile 'C:\\ronnis.csv' 
into table new_tbl_name 
fields terminated by ','; 
+0

Hurray ....이 작업을 수행합니다 (서버를 쓸 수있는 세계 기록 가능한 디렉토리를 작성해야하지만). 버퍼링되지 않은 출력은 지정된 파일에 즉시 나타납니다. –

0

내가 수동으로 LIMIT와 함께이 일을한다 생각할 수있는 유일한 것은 -

은 (그러나 적어도 그것은 단지 즉시 출력을 생성 시작 mysqldump는 거의 내가 그것을 제외하고 원하는 것은 전체 테이블을 덤프 입니다). 얼마나 많은 속도 향상을 얻을 수 있을지는 모르겠지만 적어도 결과는 더 작을 것입니다. 반면에 여러 쿼리를 처리해야하므로이 방법이 나쁜 해결책이 될 수 있습니다.

당신은 unbuffered query 사용할 수 있지만이 실행되는 동안 다른 쿼리 "몰래"수 없기 때문에, 나는 그

+0

이 데이터 집합의 유일한 사용자이므로 DB에 액세스 할 수 없다는 문제는 없습니다. 그러나 "unbuffered_query"는 MySQL 문이 아닌 PHP입니다. –

+0

그렇습니다.하지만 결국에는 '클라이언트'를 사용하여 데이터베이스에 연결하고, php-as-a-client는 결과 집합을 반환하는이 방법을 지원합니다. 그러나 그것은 단지 생각입니다. – Nanne

관련 문제