2012-10-19 6 views
7
를 실행할 수 없습니다

내 구글 클라우드 SQL 테이블 1,126,571 행 현재 및 추가 최소 30,000 모든 day.When 쿼리 실행이 :Google 클라우드 SQL : 문

select count(distinct sno) as tot from visits 

는 오류 다음 생성하라는 메시지가 SQL :

Error 0: Unable to execute statement 

. Cloud SQL 쿼리가 60 초 동안 예외를 초과 할 것인가? 테이블이 커지면 어떻게 문제를 극복 할 수 있습니까?

답변

0

INDEXsno 열에 추가하면 성능이 향상됩니다.

ALTER TABLE visits ADD INDEX (sno) 
+0

내 테이블에 매초 삽입이 진행 중입니다. 따라서 인덱싱을 사용하면 삽입 쿼리 성능이 저하됩니다. –

+0

@JinjuJoseph 방문에 트리거를 추가하여 다른 테이블에서 원하는 값을 업데이트 할 수 있습니다. 그런 다음 거기에서 직접 집계 값을 선택합니다. –

1

테이블을 두 개의 테이블로 분리하십시오. 하나는 새로운 방문을 ... 거래를 ... 하나는보고를 위해. 보고 표를 색인화하십시오. 정기적으로 데이터를 전송하고 지 웁니다.

트랜잭션 테이블은 비교적 작기 때문에 계산이 빠릅니다. 보고 표는 색인으로 인해 계산이 빠릅니다.

0

예를 들어 첫 번째 선택 쿼리는 50000으로 제한되어야하며 두 번째 선택 쿼리는 50000에서 시작하여 50000으로 제한되어야하는 등과 같이 많은 부분에 대해 선택 쿼리를 분할하십시오.

1 기록 카운트 받기 :

당신은이 시나리오가 있다고 할 수 있습니다.

2 루프를 만들어 레코드 수를 줄입니다. 각 루프에 대한

3

, 당신은 어디로 이전에서 선택을 시작해야하며, 선택 쿼리가 50000 개 레코드를 선택하고 다음 루프에서

4- (프로그래밍 언어 무엇에 따라 다름) 데이터 테이블에 결과를 추가 할 루프 종료, 예를 들어, 두 번째 쿼리는 다음 50000 레코드를 선택해야합니다.

이 SQL 쿼리 문에 의해 당신의 선택 시작 인덱스를 지정할 수 있습니다

SELECT * FROM mytable somefield LIMIT 50000 OFFSET 0; 

그런 다음 당신은 당신이 원하는 모든 데이터를 얻을 것이다.

참고 : 60 초 동안로드 할 수있는 최대 레코드 수를 확인하려면 테스트를 수행하십시오. 그러면 루프가 줄어들어 성능이 향상됩니다.