2010-03-22 2 views
0

주어진 시간에 약 1 밀리미터 정도의 테이블에 InnoDB 스토리지 엔진을 사용해야합니다. 매우 빠른 속도로 레코드가 삽입되고 며칠 내에, 아마도 1 주일 이내에 삭제 될 것입니다. 핑 테이블에는 약 백만 개의 행이 있지만 웹 사이트 테이블에는 약 10,000 개 밖에 없습니다.총 개수 (행) 합계 (행 + 행 2)로 MySQL 문 최적화

select url 
from website ws, ping pi 
where ws.idproxy = pi.idproxy and pi.entrytime > curdate() - 3 and contentping+tcpping is not null 
group by url 
having sum(contentping+tcpping)/(count(*)-count(errortype)) < 500 and count(*) > 3 and 
count(errortype)/count(*) < .15 
order by sum(contentping+tcpping)/(count(*)-count(errortype)) asc; 

내가 entrytime에 인덱스 아직 주사위를 추가 :

내 문은 다음입니다. 누구든지 내가이 쿼리의 기본적인 최적화를 조사하기 위해 고려해야 할 것에 관해서 나에게 뼈를 던질 수 있습니까? 결과 집합은 단지 200 행과 같기 때문에 나는 거기에서 죽지 않을 것이다.

+1

조회중인 관계의 스키마 ('CREATE TABLE' 문)를 표시하려면 설명을 편집하십시오. – bignose

+0

설명을 편집하여이 쿼리에서 RDBMS 쿼리 설명 자의 출력을 표시하십시오. – bignose

+0

집에있는 PC로 돌아 가면이 작업을 수행합니다. 지금은 다음과 같이 말할 수 있습니다. 두 테이블 각각에 1 개의 기본 키가 있으며 두 경우 모두 INT입니다. 유일한 색인은 기본 키에 있습니다. 나는 내가 만든 간단한 것들이 아무 것도하지 않았던 것처럼 특정한 방법으로 더 많은 인덱스를 만들어야하는지 궁금해하고있었습니다. – Zombies

답변

2

관계의 스키마가 없으면 몇 가지 추측을해야합니다.

  • 당신이 WHERE a.attrname = b.attrname 절을 제작하는 경우는, 그 대신 JOIN 위해 밖으로 울고.

  • COUNT(*)을 사용하면 COUNT(some_specific_attribute)보다 중복되고 때로는 효율성이 떨어집니다. 기본 키는 좋은 후보입니다.

  • contentping+tcpping IS NOT NULL을 테스트하여 속성이 개별적으로 null인지 아닌지 테스트하는 대신 불필요한 것으로 보이는 계산을 묻는 이유는 무엇입니까? 모두 BY 절 HAVING 및 ORDER하는 것은 가능성이 당신에게 비용이 될 것입니다 성능이 동일한 계산

    SELECT url 
    FROM website AS ws 
        JOIN ping AS pi 
         ON ws.idproxy = pi.idproxy 
    WHERE 
        pi.entrytime > CURDATE() - 3 
        AND pi.contentping IS NOT NULL 
        AND pi.tcpping IS NOT NULL 
    GROUP BY url 
    HAVING 
        SUM(pi.contentping + pi.tcpping)/(COUNT(pi.idproxy) - COUNT(pi.errortype)) < 500 
        AND COUNT(pi.idproxy) > 3 
        AND COUNT(pi.errortype)/COUNT(pi.idproxy) < 0.15 
    ORDER BY 
        SUM(pi.contentping + pi.tcpping)/(COUNT(pi.idproxy) - COUNT(pi.errortype)) ASC; 
    

    수행 많은 :

여기 내 개선의 시도이다. SELECT 절에 넣거나 속성으로 이러한 계산이 포함 된보기를 작성하고 값에 액세스하기 위해 해당보기를 사용할 수 있습니다.

+0

감사합니다. 기회가 생겼을 때 개별적으로 시도하고 작동 방식을 확인합니다. – Zombies