2014-05-14 2 views
-1

이 선택 쿼리는 완료하는 데 약 20 초가 걸립니다.선택 20 초가 걸립니다. @ 30 분 동안 계속 삭제됩니다.

select Count(*) 
    from products as bad_rows 
    inner join (
    select pid, MAX(last_updated_date) as maxdate 
     from products 
     group by pid 
     having count(*) > 1 
    ) as good_rows on good_rows.pid= bad_rows.pid 
     and good_rows.maxdate <> bad_rows.last_updated_date 
     where bad_rows.available = 0 

30 분 후에도 삭제가 실행 중입니다.

delete bad_rows 
    from products as bad_rows 
     inner join (
     select pid, MAX(last_updated_date) as maxdate 
      from products 
      group by pid 
      having count(*) > 1 
     ) as good_rows on good_rows.pid= bad_rows.pid 
      and good_rows.maxdate <> bad_rows.last_updated_date 
      where bad_rows.available = 0 

왜? 다음과 같이

이 선택에 대한 설명

enter image description here은 다음과 같습니다 : 다음과 같이

표 스키마는

+----+-------------+------------+------+---------------+------+---------+------+-------+--------------------------------+ 
| id | select_type | table  | type | possible_keys | key | key_len | ref | rows | Extra       | 
+----+-------------+------------+------+---------------+------+---------+------+-------+--------------------------------+ 
| 1 | PRIMARY  | <derived2> | ALL | NULL   | NULL | NULL | NULL | 6253 |        | 
| 1 | PRIMARY  | bad_rows | ALL | NULL   | NULL | NULL | NULL | 34603 | Using where; Using join buffer | 
| 2 | DERIVED  | products | ALL | NULL   | NULL | NULL | NULL | 34603 | Using temporary; Using filesort| 
+----+-------------+------------+------+---------------+------+---------+------+-------+-------------------------------- 
+0

'EXPLAIN' 플랜은 귀하의 검색어에 대해 어떻게 생겼습니까? 행이 몇 개입니까? – doublesharp

+0

테이블에 따라 몇 개의 인덱스 또는 기능이 있습니까? 색인을 관리하는 오버 헤드로 인해 색인이 존재하면 삭제 작업이 오래 걸립니다. 또는 기능 기반 인덱스 같은 기능 ... http://stackoverflow.com/questions/10595037/is-it-possible-to-have-function-based-index-in-mysql – xQbert

+0

33000 rows. 및 1 인덱스 (id). 'explain '을 시도하면 –

답변

1

확인 난 그냥 결과 내 쿼리가 느릴 수 있음을 암시하는 설명 봤 있도록 pid에 대한 색인이 없기 때문입니다. 실제로 그렇게 말하지는 않았지만, 나는 Explain의 결과에 대해 읽은 것에서 직감을 가졌습니다. 그래서 pid와 voila에 색인을 추가했습니다. 1 분 안에 삭제하십시오 !!

+1

http://use-the-index-luke.com은 색인을 사용하는 방법에 대한 훌륭한 소개입니다. –

+0

@gyanny_guy 자신의 대답을 받아 들여야합니다. – Eugene

관련 문제