2012-05-07 3 views
1

이 쿼리가 처음으로 실행하기 위해 약 10 초 정도 소요 선택하고 다음 각 연속 시간은 위쪽 분의 소요 : 내가 사용느린 MySQL의 쿼리 -

SELECT qQuoteDateTime, 
     qLastSalePrice, 
     qNetChangePrice, 
     qNetChangePct, 
     qShareVolumeQty 
    FROM quotes 
    WHERE qSymbol='GE' 

표는 약 2,300 기록을 가지고있다. 필자는 누군가가 모든 레코드를 표시하는 매우 빠른 쿼리를 구현하는 것을 보았지만 사용했던 코드에 액세스 할 수는 없습니다.

어떻게 속도를 높일 수 있습니까?

+0

모든 데이터 유형에는 어떤 열이 사용됩니까? 귀하의 상식과 reko_t가 모두 정확하므로 DDL을 게시 할 수 있습니까? 모든 열이 nchar 또는 blob 등인 경우이 방법이 더 적합 할 수 있습니다. – Ben

+0

데이터의 "크기"는 무엇입니까? 몇 KB가 더 많고 몇 MB가 더 많습니까? 한 때 MySQL 데이터와 비슷한 문제가있었습니다. 몇 백 줄의 행이 있었지만 테이블의 크기는 ~ 1.5GB였습니다. 많은 양의 데이터를 탐색하는 데 몇 초가 걸릴 수 있습니다. –

답변

4

쿼리에서 EXPLAIN을 실행하면 속도가 느린 이유를 확인할 수 있습니다. 가장 큰 원인은 qSymbol 열에 색인이 누락되었습니다. 컬럼이 없으면 컬럼에 인덱스를 생성하고, MySQL은 테이블의 각 행을 스캔 할 필요가 없으므로 인덱스에서 해당 행을 찾을 수 있으므로 성능이 크게 향상됩니다.

+0

@Downvoter : 댓글을 달았습니까? –

+0

왜 이것을 다운 그레이드 했습니까? 나에게 완벽한 응답처럼 보입니다. – dirkbonhomme

+1

2300 개의 행에 대해 인덱스가없는 분은 최대 10 분이 될 수 없습니다. 이건 일반 정보를 담은 자동 응답 일 뿐이며 다른 사람을 도와주지는 않지만 단점을 가지고 있습니다. –

3

데이터베이스에 문제가 있습니다. 아니면 틀린 나무를 짖고있다.
여기에 게시 한 쿼리는 주어진 행 수만큼 빠르게 커야합니다.

먼저 무엇보다도 쿼리가 원인인지 확인하십시오.
콘솔에서이 쿼리를 실행하려고 시도 했습니까? PHPMyAdmin? 결과가 동일합니까? 우연히 루프 내부에서 실행합니까?
행 수가 2300 개가 아니라 실제로 2300 개입니까?