2011-09-07 12 views
1

~ 3M 행이있는 테이블이 있습니다. 행은 date, time, msec 및 int 데이터가있는 다른 일부 열입니다. 이 행의 일부 알 수없는 부분은 별도의 테이블 outages (존재하는 날짜 범위 기준)에 존재하는 '유효하지 않은'것으로 간주됩니다.mysql/matlab : 최적화 쿼리 - 목록에서 날짜 제거

현재 쿼리는 select *를 수행 한 다음 거대한 WHERE를 사용하여 유효하지 않은 날짜 범위를 제거합니다 ('and not (RecordDate>'2008-08-05 '및 RecordDate <'2008-08-10 '). ') 등등. 이로 인해 색인을 사용할 기회가 없어집니다.

나는 결과를 제한하는 더 나은 방법을 찾고 있습니다. 이제는 쿼리가 실행되는 데 몇 분이 걸립니다.

+0

왜 아래 표를 보냅니 까? 나는 무엇을 잘못 했는가? – ethrbunny

+0

확실하지 않지만 어떤 사람들은 질문에 코드를 고집한다고 주장합니다. 귀하의 질문이 너무 모호한 것 같습니다. 개인적으로 나는이 경우에 동의하지 않으므로 다시 0으로 표결했습니다. – Johan

+0

성장할 것이 있습니다. 당신의 도움을 주셔서 감사합니다. – ethrbunny

답변

0
DELETE b FROM bigtable b 
INNER JOIN outages o ON (b.`date` BETWEEN o.datestart AND o.dateend) 
WHERE (1=1) //In some modes MySQL demands a `where` clause or it will not run. 

검색어와 관련된 모든 입력란에 색인이 있어야합니다.

+0

감사합니다. 그것은 내가 생각했던 것과는 다른 방향입니다. – ethrbunny

+0

질문 : ~ 2M 행이있는 테이블에서이 메서드를 사용할 때 실행 시간이 10 분을 초과합니다. 과도한 것 같습니다. 당신의 예제에서 RecordDate ('date')에 의해 인덱싱됩니다. '정지'테이블에는 3 개의 행이 있습니다. 또한이 구문은 '정전'테이블에서 모든 것을 제거하는 것처럼 보입니다. 반대편 ('정전'을 제외하고 모두 유지)을 원한다면 '사이가 아닌'으로 변경하겠습니까? – ethrbunny