2012-05-17 5 views
0

2012-05-17 이후에 계획 테이블에 추가 된 새로운 시장을 찾고 싶습니다. 이 선택은 작동하지만 16k 레코드의 경우 성능이 느립니다. 두 번째 고유 키워드를 제거하면 성능이 크게 향상되고 같은 결과를 얻지 만 훨씬 빠른 선택이 필요합니다. 그것은 약 25 초 걸립니다. 더 빠른 방법이 있어야합니까?mysql 성능을 선택하지 않은 경우

select distinct(market) 
from plan 
where date_added > '2012-05-17' 
and market not in (select distinct(market) from plan where date_added < '2012-05-17') 
+0

'distinct'는 함수가 아닙니다. 그래서 '뚜렷한 (시장)'을 쓰는 것이 이치에 맞지 않는다. 그리고 당신은 실제로 하위 선택에서 별개를 필요로하지 않습니다. 하지만 내가 원하는대로 하위 시장을 추가 할 필요는 없습니다. 원하는 날짜 이후에 시장을 추가하기 만하면됩니다. –

+0

성능이 좋지 않고 불필요하다는 것을 알고 있지만 성능을 더 향상시키는 방법을 모르겠습니다 ... 올바른 단어 'keyword'로 'function'이라는 단어를 변경했습니다 – panofish

+0

한 가지 옵션은 하위 선택에서 'max (date_added)'를 선택한 다음'max (date_added) < '2012-05-17'이 표시된 레코드 만 선택하십시오. 그냥 생각. 또한, 오라클에서'MINUS '를 사용하여 극적인 향상을 보았지만 mysql에 그러한 것이 있는지 확실하지 않았습니다. – Marc

답변

3

하지 특정이 성능을 개선하지만, 다른 접근법됩니다

또한
select market 
    from (select market, 
       min(date_added) min_date 
      from plan 
     group by market) as sub_plan 
where sub_plan.min_date > '2012-05-17'; 

, 제가 오라클 사나이 것을주의하자 이렇게 작은 구문 차이를 용서해주십시오.

+0

2012-05-17 이전에 추가 된 시장은 제외되지 않습니다. – panofish

+0

@panofish, 그렇지 않습니까? 하위 쿼리의 시장 최소 날짜가 2012-05-17보다 작 으면 외부 쿼리에서 선택하지 않습니다. 또는 나는 무엇인가 놓치고 있냐? – Marc

+0

죄송합니다. 문제를 잘 전달하지 않습니다. 시장 칼럼은 핵심이 아니며 가치가 반복 될 수 있습니다. 동일한 날짜 이후에 선택 날짜 (특정 시장)와 선택 별개 (시장)를 수행하는 경우 ... 2 개의 목록은 동일 할 수 있지만 두 번째 목록에는 존재하지 않는 몇 개의 새로운 시장이있을 수 있습니다 첫 번째 목록에 – panofish

0

이 전체 라인을 생략하십시오. 당신이 이미 DATE_ADDED이> 2012-05-17입니다 지정 이후

and market not in (select distinct(market) from plan where date_added < '2012-05-17' 

은 중복입니다.

+0

또한 다음과 같은 두 가지 제한이 있습니다. 1) date_added> 2012-05-17 2) NOT date_added <2012-05-07. 이는 date_added = 2012-05-17 인 경우를 완전히 무시합니다. 적절한 경우 "> ="또는 "<="를 사용할 수 있다는 것을 잊지 마십시오. – Dave

+3

2012-05-17 이후에 처음으로 'date_added'가 발생한 레코드 만 캡처하려고합니다. 그것은 그 날짜 이전에 date_added 항목이있는 레코드를 제거하려고 시도하는 이유를 설명합니다. – Marc

+0

아니요. 시장 가치가 반복되거나 언제든지 새로운 시장 가치가 될 수 있습니다. 나는 같은 날짜 이전에 존재하지 않는 날짜 이후에 추가 된 새로운 시장을 원한다. 그러므로 날짜와 <날짜> – panofish

관련 문제