2010-01-29 3 views
0

데이터 분석 프로젝트의 일환으로 mysql 데이터베이스에서 장기 실행 쿼리를 발행 할 예정입니다. 내 미래의 행동 방침은 내가 얻은 결과에 달려있다. 나에게 아직 실행중인 SELECT 문에 의해 부분 결과가 생성되는 것이 유용 할 것입니다.장기 실행 쿼리 : 부분 결과 관찰 중?

이 방법이 있습니까? 또는 질의가 완료 될 때까지 기다렸다가 초반 만에 생성 된 결과를 볼 수 있습니까?

도움 주셔서 감사합니다 :)

답변

1

일반적으로 부분적인 결과는 생성 될 수 없습니다. 예를 들어 GROUP BY 절이있는 집계 함수가있는 경우 첫 번째 행이 반환되기 전에 모든 데이터를 분석해야합니다. LIMIT 절은 출력을 계산 한 후에 적용되므로 도움이되지 않습니다. 어쩌면 구체적인 데이터와 SQL 쿼리를 제공 할 수 있습니까?

1

한 가지 고려해야 할 것은 테이블을 샘플링하는 것입니다. 일반적으로 코드를 작성할 때 반복 속도를 높이려면 데이터 분석에서 우수 사례입니다. 당신이 테이블 privelages을 만들 수 있고 경우 키 UNIQUE_ID와 UNIQUE_ID 거의 모든 데이터베이스에있는 숫자입니다

경우 일부 데이터 DATA_VALUE 일부 메가 거대한 테이블 X를 예를 들어

,

create table sample_table as 
select unique_id, data_value 
    from X 
where mod(unique_id, <some_large_prime_number_like_1013>) = 1 

것 질의를 처리하기 위해 임의의 데이터 샘플을 제공하고 테스트/쿼리 결과의 속도를 향상시키기 위해 sample_table을 다른 테이블과 결합 할 수 있습니다. 샘플링 덕택에 쿼리 결과는 대략 얻을 수있는 것을 대표해야합니다. 참고로 modding하는 숫자는 소수 일 것입니다. 그렇지 않으면 올바른 샘플이 제공되지 않습니다. 위의 예제는 원래 크기의 약 0.1 %로 테이블을 축소합니다 (정확히 0.987 %).

대부분의 데이터베이스는 mod를 사용하는 것보다 더 나은 샘플링 및 난수 방법을 사용합니다. 문서 버전을 확인하여 사용 가능한 버전을 확인하십시오. 도움이

희망, McPeterson

1

그것은 당신의 쿼리가 무엇을하고 있는지에 따라 달라집니다. group by 또는 by order 또는 having 절을 가진 쿼리에 대해 발생할 수있는 결과를 생성하기 전에 전체 결과 집합을 가져야하는 경우 수행 할 작업이 없습니다.

그러나 지연의 원인이 클라이언트 측 버퍼링 (기본 모드) 인 경우 기본값 대신 데이터베이스 처리기의 속성으로 "mysql-use-result"를 사용하여 조정할 수 있습니다 "mysql-store-result". 이것은 Perl 및 Java 인터페이스에 해당됩니다. C 인터페이스에서 쿼리를 실행하는 함수의 버퍼링되지 않은 버전을 사용해야한다고 생각합니다.