2011-03-09 6 views
0

나는 MySQL의 4 테이블이 테이블은 같은 스키마가 : MS 워드에서성능 저하

itemId int 
essay longtext 
dateCreated timestamp 
creatorId int 

이 논문의 대부분은 매우 큰 페이스트 (멀티 메가 바이트 에세이를 생각해 보라). 나는 특정 테이블에서 누가 에세이를 제출했는지 판단하기 위해이 테이블을 쿼리하려고합니다. 이 쿼리에서 내 첫 번째 접근 방식은 다음과 같습니다.

select creatorId from stories where dateCreated >= '2011-03-09 11:00:00'; 

결과는 약 10-20 개의 결과 만 반환합니다. 유감스럽게도 쿼리는 10 분 이상 걸렸습니다 (전체 테이블 크기는 8GB이고 100,000 행이므로). dateCreated 열에는 인덱스가 있습니다.

이 쿼리의 성능을 어떻게 향상시킬 수 있습니까?

+2

8GB와 100,000 행은 그리 크지 않으며 10 분이 걸리지 않습니다 (무거운 열을 선택하거나 조건을 설정하지 않음). 'SHOW CREATE TABLE stories; '를 실행하고 결과를 게시 할 수 있습니까? 인덱스에 문제가있는 것 같습니다. EXPLAIN SELECT ...를 실행하면 유용합니다. – Galz

+0

'dateCreated'는 NULL을 허용합니까? –

+0

로컬 데스크톱 드라이브 또는 서버의 디스크 어레이에서이 작업을 실행하고 있습니까? –

답변

0

내 테이블을 좀 더 살펴본 후에 문제를 발견했습니다. 색인이 잘못 작성되었습니다. 나는 실제로이 테이블에 다른 메타 데이터 (예 : dateLastUpdated 및 approved boolean)를 가지고 있습니다. "dateLastUpdated = x and approved = true and dateCreated> = y"와 같은 검색을 수행하면 필드의 3 열 인덱스의 이점이 있습니다. 그래서이 테이블에 많은 인덱스를 만들어야 할 것 같습니다. 다행히도 인덱스를 너무 많이 삽입하여 삽입 성능을 손상시키지 않기를 바랍니다. 모두를 괴롭히는 것에 유감스럽게 생각합니다.

관련 문제