2011-01-11 2 views
1

두 테이블을 합치겠습니다. 테이블 unique_nucleosome_re에는 약 600,000 개의 레코드가 있습니다. 다른 테이블에는 20,000 개의 레코드가 있습니다. 이상한 것은 성능이며 WHERE 절의 조건에 따라 에 따라 EXPLAIN의 답이 달라집니다. 그것이되었을 때 어디 n.chromosome = 'X' 그것은 약 3 분 걸렸다. 인 경우 n.chromosome = '2L' 30 분 이상 걸렸으므로 연결이 끊어졌습니다.MySQL의 느린 쿼리와 EXPLAIN이 이상한 답변을했습니다.

SELECT n.name , t.transcript_start , n.start 
FROM unique_nucleosome_re AS n 
INNER JOIN tss_tata_range AS t 
ON t.chromosome = n.chromosome 
WHERE (t.transcript_start > n.end AND t.ts_minus_250 < n.start) 
     AND n.chromosome = 'X'  
ORDER BY t.transcript_start 
; 

이것은 EXPLAIN의 답변입니다. WHERE가 n.chromosome = '2L'

'1', 'SIMPLE', 'n', 'ref', 'start_idx,end_idx,chromo_start', 'chromo_start', '17', 'const', '68109', '100.00', 'Using where' 

때 WHERE가 n.chromosome = 'X'

'1', 'SIMPLE', 'n', 'ALL', 'start_idx,end_idx,chromo_start', NULL, NULL, NULL, '606096', '48.42', 'Using where; Using join buffer' 

때 는 X 또는 2L에 대한 레코드의 수는 거의 동일하다. 나는 지난 며칠 동안 보냈지 만 나는 그것을 이해할 수 없었다. 내가 볼 수 없거나 버그 일 수있는 간단한 실수 일 수 있습니다. 도와 주시겠습니까?

+0

가끔 옵티 마이저가 도청되어 퍼지 결과가 나옵니다. –

+0

다른 버전으로 사용해 볼 수 있습니까? (저는 느린 작가입니다) –

+0

불행히도 다른 버전은 나와 함께 사용할 수 없습니다. 그것은 MySQL 서버입니다. 5.1.49-1ubuntu8.1 –

답변

0

먼저 인덱스 정보를 보지 않고도 염색체 키와 transcript_start (최소 염색체 키)의 TSS_TData_Range에 대한 인덱스가 있습니다. 또한 unique_nucleosome_re 테이블에 염색체에 대한 인덱스가 있다고 가정합니다. 그런 다음, TSS가 SHORT 테이블이 나타납니다, 그래서 나는

SELECT STRAIGHT_JOIN 
     n.name, 
     t.transcript_start, 
     n.start 
    FROM 
     tss_tdata_range t, 
     unique_nucleosome_re n 
    where 
      t.chromosome = 'X' 
     and t.chromosome = n.chromosome 
     and t.transcript_start > n.end 
     and t.ts_minus_250 < n.start 
    order by 
     t.transcript_start 

나는 성능에 관심이있을 것 ... 쿼리의 첫 번째 위치에 그것을 이동하고 "STRAIGHT_JOIN"조항의 사용을 호출 할 것이다 너무 잘 작동한다면 ...

+0

당신은 인덱스에 관한 것입니다. 두 표의 염색체와 WHERE의 다른 키가 색인됩니다. 나는 그것을 시도하고 알려 드리겠습니다. :) –

+0

Hmmm ,,, 첫 번째는 17 초가 걸리고 두 번째 단계는 10 초로 제한 될 때 37 초가 걸렸습니다. 캐시를 제거하기 위해 프로파일 링 전에 서버를 다시 시작했습니다. –

+0

@microbe 서버의 새로 고침과 캐시에 좋은 점이 있습니다.하지만 여전히 다소 일관성이 있다는 것을 알게 될 것입니다 ... 도움이 되니 기쁘게 생각합니다. 어떤 사람들은 STRAIGHT_JOIN이 당신을 위해 할 수있는 힘을 깨닫지 못합니다. 특히 당신의 데이터와 관계를 아십시오 ... – DRapp