2013-03-14 5 views
0

최근 내 데이터베이스에 대한 몇 가지 쿼리에 문제가있었습니다. 이는 내 데이터베이스 테이블 중 하나가 50,000 개의 행에서 1,000,000 개의 행에서 2,000,000 개로 확장 되었기 때문입니다.쿼리 속도 향상 방법

books에는 2,000,000 개의 서적이 있으며 책 순위와 책 크기에 이르기까지 모든 종류의 정보가 있습니다.

나는 간단한 쿼리를 실행하려고

...

SELECT isbn FROM books WHERE rank < 100000 

10 분 동안 기다린 후 나는 그냥 실속 유지로 내가 생각 다른 테이블을 쿼리 할 때, 나는이 문제가없는 쿼리를 종료했다 문제는 테이블의 크기입니다.

색인 생성을 읽기 시작 했으므로 이것이 내 상황을 해결할 수있는 최선의 방법인지 그리고 그렇지 않은지 알고 싶습니다.

+0

코드 또는 SQL 클라이언트에서이 쿼리를 실행 했습니까? 코드에서 실행 한 경우 쿼리가 아닐 수도 있지만 Aheho의 답변에 언급 된대로 렌더링 코드가 될 수 있습니다. – Jeff

답변

1

색인 rank 열을하고 내가 시도하려는 최초의 일이 될 것입니다 순위 컬럼에 인덱스를 추가

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

How do I add indices to MySQL tables?

+0

좋아요, 제 2의 링크에서 당신이 순위 칼럼을 인덱싱한다고 가정하면 isbn 칼럼을 기본 키처럼 만들 것입니다. –

+0

'rank'의 값에 따라 (로그 시간으로) 빠르게 필터링하려면, 'rank'로 정렬 된 행의 순서를 알아야합니다. 그것이 바로 인덱스가 효과적으로 제공하는 것입니다. 다른 컬럼에 인덱스를 추가한다고해서이를 달성하는 데는 도움이되지 않습니다. 컬럼에 인덱스가 없다면, MySQL은 모든 항목을 검색하여'rank <100000'인지 확인해야합니다. – YXD

+0

괜찮습니다. 몇 가지 개선점을 볼 수 있습니다. 테이블과 신중하게 인덱스를 작성해서는 안된다고 가정합니다. 색인을 생성 할 열을 선택하십시오. 또한 책의 순위가 끊임없이 변화하고있어 전체 테이블을 다시 색인해야한다는 의미는 아닙니다. –

1

날아보세요.

그러나 2 백만 개의 행을 가진 테이블은 실제로 그렇게 크지 않다고 말하면서 데이터베이스가 10 분 내에 2 백만 행의 테이블 스캔을 수행 할 수 없다는 것이 이상하다는 것을 알게됩니다. 당신은 심지어 쿼리의 다른 테이블에 합류하지 않습니다.

예상되는 행 수는 얼마나됩니까? 지연이 데이터베이스 서버로 인한 것이고 체인의 다른 곳에서는 발생하지 않았다고 확신합니까? 웹 클라이언트에서 200,000 행 html 테이블을 렌더링하는 것과 마찬가지로?

+0

약 500k 행이 반환 될 것으로 예상되었지만 지금은 도움이 될 수있는 몇 주 동안 서버를 다시 시작하지 않았습니다. 하지만 지금은 큰 일을하고 있습니다. 모든 2,000,000 레코드의 순위 열을 업데이트하십시오. –

+0

행의 25 %가 쿼리 조건과 일치 할 것으로 예상되는 경우 속도가 크게 느려지지 않을 것입니다. Rank에 색인을 추가합니다. 당신은 약간을 볼지도 모르지만, 당신의 질문은 아마도 돌아올 시간이 오래 걸릴 것입니다. – Aheho