StackOverflow에 비슷한 질문이 있지만 테이블에 다른 인덱스를 테스트 한 후에 인덱스가 작동하는 방식을 이해할 수 없다고 생각합니다. 내 쿼리의 성능에서 내가 겪고있는 동작을 설명하십시오. 내가 예를 들어이 쿼리를 사용하고여러 개의 단일 필드 인덱스 대 여러 필드 인덱스
, 나는 상세하게 설명하려고하는거야 :
SELECT ss1.PlayerID, ss1.Name, ss1.Series, ss1.LanesNum, ss1.Date, ss1.LeagueName, ss1.Season FROM SeriesScores ss1
JOIN (SELECT Series, Gender, LanesNum, Bowlout, Season FROM SeriesScores
WHERE Gender = ? AND LanesNum = ? AND Series > -1 AND Bowlout = 'No' AND Season = '2011-2012'
ORDER BY Series DESC LIMIT 0,?) as ss2
USING(series, gender, lanesNum, bowlout, season)
ORDER BY ss1.Series DESC
이 쿼리는 각 쌍에 대해 특정 계절에 볼링을 가장 높은 시리즈를 가져 오는 데 사용됩니다 볼링 센터에서 남성과 여성 모두를위한 레인 차선을 확보했습니다.
MAX 집계 함수를 사용하는 대신 자체적으로 테이블에 합류합니다. 지정된 차선 쌍에 매듭이 있으면 모든 이름을 표시해야하기 때문입니다.
기본적으로 내부 SELECT가 반환하는 것과 일치하는 모든 필드를 조인합니다. 그 내부 SELECT는 주어진 젠더와 지정된 레인 쌍에 대한 상위 X 플레이어를 반환합니다.
USING 부분은 동일한 성별, 시리즈, 레인 및 찾고있는 시합과 계절을 선택하지 않은 선수 만 확인합니다. 그런 다음 가장 높은 시리즈에서 가장 낮은 시리즈 순으로 주문합니다.
이 쿼리는 남성 전용 12 회 (볼링 센터에서 12 쌍의 레인) 12 회 및 휠 번호 및 성별 매개 변수 만 변경하여 for 루프에 있습니다.
그런 다음 결과를 응용 프로그램에 표시하기 위해 Java에서 두 가지 다른 벡터에 모든 결과를 넣습니다 (남성 벡터와 여성용 벡터).
인덱스가 없으면 벡터에 결과를 넣는 것을 포함하여 모든 작업을 실행하는 데 약 11 초가 소요됩니다. (남성 12 쿼리는 5.5 초, 여성은 12 초).
(gender, lanesNum, series)에 대한 색인을 사용하면 전체 요구 사항에 대해 0.04 초가 소요됩니다.
그 색인은 WHERE 절에서 사용하는 가장 중요한 필드이기 때문에 사용했지만 다른 것들을 시도하고 실제로 다른 색인을 사용했기 때문에 속도가 향상되는 이유를 알 수 없습니다. 내 쿼리를 100 % 이상 저조하게 만들었습니다. 더구나, 나는 그 색인에 "bowout"와 "season"을 추가하면 더 빠른 쿼리를 얻을 수 있을지 궁금합니다.
먼저 시리즈에서 단일 열 인덱스를 사용해보고 성능을 테스트하고 싶습니다. 이 쿼리는 모두 22 초가 걸리는 인덱스입니다.
인덱스를 사용해야하는 위치와 필드를 여러 개 사용하거나 단일 필드에서 여러 인덱스를 사용해야하는 경우를 이해할 수 없다는 결론에 이르렀습니다. 또한 이해할 수 없습니다. 어떻게 (잘못된) 인덱스를 사용하면 실제로 성능이 저하 될 수 있습니다.
매우 명확하고 상세한 답변, 감사합니다! 이 쿼리가 간단하기 때문에 다른 인덱스를 만드는 데별로 사용하지 않는다고 말할 때의 간단한 질문 ... 다른 (때로는 더 복잡한) 쿼리가 있기 때문에 같은 테이블을 사용하는 다른 쿼리에 대한 인덱스를 추가하는 것이 유익합니다. 데이터베이스가 대신 다른 인덱스를 사용해야한다고 생각하면이 쿼리를 느리게 할 수 있습니까? 그 외에는 모든 걸 얻었 어, 고마워. –
처음에 말했듯이, 이것은 단일 쿼리 정신 운동이었습니다. 쿼리가 여러 번 있으면 모든 쿼리에 대해 적절한 성능을 원할 것입니다. 모든 것을 제공 할 수있는 테이블 당 하나의 인덱스가 필요하지만 반드시 그런 것은 아닙니다. 통계가 uptodate되면, u 리를 처음 실행하는 동안 또는 u 리 옵티 마이저 자체가 멋진 작업을 수행하지 못할 경우를 제외하고 추가 인덱스가 속도 저하를 야기해서는 안됩니다. –
@ Adam - 이전 주석에서 언급 한 첫 번째 실행 중 매우 작은 속도 저하는 쿼리를 평가하는 데 사용할 수있는 다양한 알고리즘을 평가하는 쿼리 최적화 프로그램에 대한 것입니다. 그 후,이기는 알고리즘 (이른바 쿼리 플랜)은 동일한 쿼리에 대해 재사용됩니다. –