2012-04-14 6 views
4

나는 약 10 억 개의 행을 가진 ~ 100GB MySQL 테이블을 가지고 있습니다. 그것은 단지 8 개의 열을 가지고 있으며 그 중 하나는 얇게 잘라진 "BETWEEN"쿼리를 통해 대부분의 조회에 사용되는 인덱싱 된 DateTime입니다.큰 MySQL 테이블 - 인덱스 해체

이전에이 컬럼의 인덱스는 훌륭하게 작동했지만 테이블이 계속 커지면서 인덱스가 갑자기 작동하지 않게되었습니다. 이제 EXPLAIN은 모든 쿼리에서 "filesort 사용"을 표시하고 메모리 풀에 대한 모든 my.conf 값을 사용하지 않습니다.

키가 처리 할 수있는 최대 값은 있습니까? 분할 문제가 해결 될까요?

어떤 통찰력도 인정 될 것입니다. 감사!

+0

얼마나 많은 행이 시도 할 수 있습니다? 어떤 엔진을 사용하고 있습니까? InnoDB 또는 MyISAM? – Qualcuno

+0

첫 번째 문장에서 나는 거의 10 억 개의 행을 말했습니다. 그리고 그것은 MyISAM입니다. 감사! – Harry

+0

색인이 메모리에 맞습니까? 테이블 상태 및 'key_buffer_size'표시 – jordeu

답변

2

는, MySQL 서버를 중지 한 다음 데이터 폴더로 이동하고 실행 테이블을 복구해야합니다

myisamchk -r <table_name> 

또는

myisamchk -r -v -f <table_name> 

. 또한 테이블에

REPAIR TABLE <table_name> 

대한 추가 정보를 원하시면 herehere

+0

와우, 정말 쉬웠다. 나는 그걸 시도하지 않았다는 것을 믿을 수 없다. 도와 줘서 고마워! – Harry

1

힌트로 색인 사용을 강제 할 수 있습니다. 체크 아웃 the mysql page explaining the index hints. 정말 빠른 예가 있습니다.

SELECT * FROM table1 USE INDEX (col1_index) 
    WHERE col1 BETWEEN date1 AND date2; 

그러나 나는 그것이 당신의 주된 문제라고 생각하지 않습니다. 앞으로 발생할 수있는 문제점을 예견하기 위해 신중하게 읽으라는 조언을드립니다. MySQL Resource Limits Excerpt

If you do encounter a full-table error, there are several reasons why it might have occurred: 
... 
You are using MyISAM tables on an operating system that supports files only up to 2GB in size and you have hit this limit for the data file or index file. 

그런 경우는 그렇지 않습니다. 그러나이 시점에서 몇 가지 가능성을 고려할 수 있습니다.

'myisampack'이라는 키워드를 빠르게 검색하는 것이 좋습니다. 당신이 할 수있는 경우