2012-10-23 1 views
1

내 프로젝트에서 동일한 쿼리를 실행하지만 다른 제한 값을 사용하는 루프가 있습니다. 처음 10 루프 사이클에서는 쿼리가 허용되는 속도로 실행되지만 속도는 느려집니다. 표가 나는 쿼리를 만들고있어 어떤 것은 150K 레지스터를 가지고 있으며, column1은 정수이며 내 쿼리는 다음과 같습니다ORDER BY 및 LIMIT로 쿼리를 만드는 방법이 더 빠릅니까?

SELECT * FROM my_table ORDER BY column1 ASC LIMIT 0,1000 
... 
SELECT * FROM my_table ORDER BY column1 ASC LIMIT 9000,10000 

내가 모든 150K 레지스터마다 정렬 알 수있는 바와 같이. 하지만 표시된 범위 사이에서만 레지스터를 정렬 할 수 있습니까? 이 쿼리를 더 빠르게 작동 시키려면 어떻게해야합니까?

답변

2

이것은 어리석은 질문 일 수 있지만 column1 색인이 생성 되었습니까?

그리고 데이터베이스가 돌아 :)

는 10 개 번호를 상상해 임의의 순서로 올바른 1,000 요소를 결정하기 위해 전체 데이터 집합을 정렬 할 필요가있는 경우는 sence을 만들 것, 두 번째 질문에 대해 생각

4, 7, 1, 3, 9, 8, 5, 2, 6, 0 

5 개의 숫자를 오름차순으로 선택하고 싶습니다. 그냥 처음 5을, 그들을 분류하는 경우가

1,3,4,7,9 

을 얻을 것입니다 당신이 먼저 전체 목록을 분류 한 다음 5했다 경우는

0,1,2,3,4 

편집있을 것입니다 : 그 이후 는 PK입니다. LIMIT가 기본 키가 순차적인지 확인하기에 충분히 영리한 지 여부는 알지 못합니다. 그렇지 않으면 확실히 모든 키를 먼저 읽어야합니다. EXPLAIN은 당신에게 말할 것입니다. 이 순차적 인 경우,이 같은 아마 뭔가 당신은 그래서,

SELECT * FROM ... WHERE column1 >= 9000 ORDER BY column1 ASC LIMIT 1000 

이 곳은 9000에서, 컬럼의 값을 갖는 모든 행을 무시한다는 보장합니다 도움이 될 COMMENT

에 근거한

편집 작은 데이터 세트로 작업합니다.

+0

IT는 PK입니다. 이미 색인이 생성되었습니다 – andriy

+0

귀하의 예가 옳습니다. 나는 항상 한계를 적용하기 전에 테이블을 정렬해야합니다. – andriy

+0

그래도 최적화 할 수있는 방법이 있어야합니다. pentium10이 게시 한 링크는 다음과 같은 옵션에 대한 개요를 제공합니다. – JustDanyul

0

시도 :

Select * from my_table where primary_key in 
(SELECT primary_key FROM my_table LIMIT 9000,10000) 
ORDER BY column1 ASC; 
관련 문제