2013-07-16 2 views
1

현재 모바일 응용 프로그램을 개발 중이며 MySQL을 사용 중입니다. 나는 지금 내가 책 (이 테이블은 기록과 함께 100k +가 될 것이다)의 테이블을 가지고있는 상황에 직면 해있다. 이 표에는 NotSelling이라는 열이 있습니다. db의 예 :데이터베이스 정렬 시간 복잡성

Book A 45 
Book B 0 
Book C 159 
Book D 78 
. 
. 
. 
Book Z 450 

위의 수치는 db의 NotSelling 열에 나타나는 수치입니다. 이 대형 테이블에서 상위 20 권의 책을 추출해야합니다. 이제이 일을 내 솔루션 테이블을 정렬하고 단지 TOP 상위 20 개 레코드를 추출하는 데 사용하는 것입니다.

내가 알고 싶은 것은 테이블을 정렬하는 성능에 관한 것입니다. 테이블을 계속 정렬하여 상위 20 개 결과를 얻으려면 오랜 시간이 걸릴 것입니다. 나는이 문제에 대한 해결책을 제시했다 :

  • 색인 NotSelling 문제.
  • 쿼리를 캐시합니다 (하지만 무효화 빈도가 높을 경우 문제가 될 수있는 대략적인 무효화에 대해 읽었습니다)
  • 테이블을 정렬하여 상위 20 개 레코드를 가져 와서 다른 테이블에 배치 한 다음 주기적으로 테이블을 1 시간마다 업데이트하라.

하지만이 모든 것이이 문제에 대한 더 나은 해결책을 알고 있거나 내가 수행 할 기능의 성능을 최적화하는 방법이나 방법이 있습니까? 참고 나는 초보자이므로 누구나 데이터베이스 성능에 관해 읽을 수있는 올바른 방향으로 나를 지적 할 수 있어야만 정말 감사 할 것입니다.

답변

0

나는 당신이 너무 많이 생각하고 있다고 생각합니다. 확실히 조숙 한 최적화의 경우. 위에서 언급 한 모든 솔루션은 완벽하게 유효합니다. 당신은 100K + 레코드가 Mysql에 chowder라는 것을 알아야한다. 우리는 뛰어난 퍼포먼스와 함께 3 천만 개의 행이있는 테이블에서 일상적으로 order을 사용했습니다.

그러나 반드시에는 정렬 할 열의 색인이 있어야하며 테이블 스키마를 다시 확인하십시오. Reg. 캐싱 역시 걱정하지 않아도됩니다. mysql은 테이블이 변경되지 않았을 때 반복적 인 쿼리를 처리합니다. 그러나 칼럼의 인덱스는 반드시 필요한 기본 요구 사항입니다.

+0

답장을 보내 주셔서 감사합니다!코딩을 시작하기 전에 모든 것을 명확히해야했습니다. – user481610

0

정렬 성능에 대해 걱정하지 마십시오. 실제로 문제가되는 것으로 밝혀지면 색인을 추가하여 나중에 데이터베이스에서 항상 수정할 수 있습니다.

디자인 단계에서 최적화는 산만 함입니다. 대신 구현이 문제를 나타내는 기능과 직접성에 초점을 맞 춥니 다. 그것들이 목표에있는 한, 다른 모든 것은 비교적 쉽게 고정 될 수 있습니다.

+0

답장을 보내 주셔서 감사합니다! – user481610

0

인덱스를 지원하는 인덱스의 데이터 구조 안에있는 메타 데이터의 종류에 따라 O (n) 시간에 탐색이 수행 될 수 있으며 n은 반환되는 항목 수입니다.

이것은 이론상으로 1 백만 또는 200 조 기록이 있는지 여부에 관계없이 처음 20 장을 가져 오는 것은 색인이있는 한 빨리 수행됩니다. 실제로 작은 인덱스는 메모리에 저장되지만 큰 디스크는 디스크를 사용해야하므로 성능 차이가 발생할 수 있습니다.

간단히 말해서, 너무 걱정하고 있습니다. Srikar Appal이 올바르게 인덱싱 된 100k 레코드 테이블은 MySQL에 아무 것도 없습니다.