2011-05-06 5 views
0

숫자와 관련된 2 행 테이블이 있으며 그 숫자 큐브가 있습니다. 지금 당장 약 1300 만 개의 숫자가 삽입되었으며, 매우 빠르게 성장하고 있습니다.간단한 MySQL 출력 질문

SELECT * FROM table과 같은 명령을 사용하는 것보다 간단한 테이블을 빨리 출력하는 방법이 있습니까?


두 번째 질문은 숫자 범위 선택에 관한 것입니다. 위에서 언급했듯이, 나는 숫자와 큐브를 저장하는 데 매우 빠른 속도로 커지는 대형 데이터베이스를 가지고 있습니다. 궁금하신 분은 3 자리 숫자를 찾으려고합니다. 그 숫자는 3 등분 할 때 33까지 합계됩니다. 그래서 저는 서버/클라이언트 프로그램을 사용하여 클라이언트에 숫자 범위를 보내어 상기 숫자 범위의 방정식을 수행 할 수 있습니다.

예를 들어 첫 번째 클라이언트가 체임을한다고 가정 해 봅시다. 나는 0, 100의 범위를 부여합니다. 숫자를 계산하고 다시 트리플렛을 찾았는지 서버에 알려서보고합니다. 그가하지 않으면 루프가 계속됩니다.

클라이언트가 자체적으로 계산을 수행 할 때 속도가 매우 느려집니다. 그래서, 나는 클라이언트가 계산을 할 필요가 없도록 큐브 번호를 저장하기 위해 데이터베이스를 사용하기로 결정했습니다. 문제는 숫자 범위에만 액세스하는 방법을 모르겠다는 것입니다. 예를 들어 클라이언트의 범위가 0-100이면 0-100 사이의 모든 숫자의 큐브에 액세스해야합니다.

숫자 범위를 반환하는 선택 명령은 무엇입니까?


테이블에 사용중인 엔진은 MyISAM입니다.

+3

데이터 형식 (IE : BLOB)을 기반으로 쿼리가 지연 될 수 있으므로'SELECT *'는 권장되지 않습니다. 필요한 것만 선택하십시오 –

+0

'LIMIT'과'OFFSET'에 대해 읽어보십시오 : http://stackoverflow.com/search?q = mysql + limit –

+0

@ypercube 그렇게했습니다! 답으로 게시하면 받아 들일 것입니다. –

답변

2

테이블 "MYTABLE은"두 개의 열

number  cube 
    0   0 
    1   1 
    2   8 
    3   27 

쿼리 명령 (범위의 시작 (100)이고 끝이 200 가정) 될 경우 :

select number, cube from mytable where number between 100 and 200 order by number; 

당신이 만약을 이 쿼리를 가능한 빨리 수행하려면 다음을 확인하십시오.

  • 숫자는 인덱스입니다. 따라서 범위 시작을 찾기 위해 테이블 ​​스캔을 수행 할 필요가 없습니다.
  • 생성 한 색인이 클러스터됩니다. 클러스터 된 인덱스는 인덱스의 리프가 레코드이므로 비교할 때 더 빠릅니다 (비교할 때 클러스터의 인덱스가 아닌 리프는 완전히 다른
    레코드의 일부입니다). 디스크). 또한 클러스터 된 인덱스 은 데이터에 정렬 된 구조를 강제로 지정합니다. 따라서 단일 블록에서 100 레코드를 모두 읽을 수 있습니다.

인덱스를 추가하면 물론 테이블에 쓰기가 약간 느려집니다. 또한 테이블에 순서대로 쓰고 있다고 가정합니다 (예 : 0,1,2,3,4 등은 10,5,100,3 등이 아닙니다). 클러스터 된 인덱스가있는 테이블에 쓰기 작업은 테이블에 임의의 순서로 쓰는 경우 매우 느립니다 (DB가 새 레코드에 맞게 레코드를 계속 이동해야하므로).

+0

그 해답을 찾아 주셔서 대단히 감사합니다. 그러나 저는 MySQL 멍청한 놈이기 때문에 몇 가지 질문이 있습니다. 첫째로, 색인에 의해 나는 당신이 열쇠를 의미한다고 생각하니? 숫자 열 n을 테이블의 기본 키로 설정했습니다. 나는 이것이 잘못된 것이라고 생각하지만 그것이 지수라고 믿습니다. 둘째, 클러스터 된 DB는 어떻게 만듭니 까? –

+0

+1 니스. 숫자가 부동 상태이고 순서가 아닌 경우에 대/소문자를 추가 할 수 있습니다 (색인을 추가하고 색인 사이에'between-where' 또는'limit-offset' 사용). –

+1

@Matt; 테이블이 InnoDB 엔진을 사용하고 있다면 (테이블 정의를 확인하십시오), 기본 키는 기본적으로 클러스터됩니다. –