BOAZ SQL 스터디(4)-Performance Tuning

업데이트:

Performance Tuning SQL Queries

The theory behind query run time

쿼리 속도를 빠르게 하기 위해서는 연산의 수를 줄여야 한다.

  • Table Size
    • 쿼리가 수많은 row를 가진 여러 테이블에 접근한다면, 성능에 영향을 준다.
  • Joins
    • Join의 결과가 row를 크게 늘리게 된다면, 쿼리 속도가 느려진다.
    • Join절에 SubQuery를 사용하여 성능을 높이자.
  • Aggregations
    • 여러 행을 결합하는 경우는 해당 행들을 그대로 가져오는 것보다 연산이 늘어난다.

쿼리 런타임은 내가 조절할 수 없는, 데이터베이스 요소들에도 영향을 받는다.

  • Other users running queries
  • Database software and optimization

Reducing table size

필요한 것만 query하게끔 하면 쿼리 성능을 크게 향상시킬 수 있다.

Limit 을 사용하여 쿼리 결과를 빠르게 확인할 수 있다.

count의 속도를 빠르게 하려면 subquery를 사용하자.

Making joins less complicated

join전에 테이블 사이즈를 줄이는 것이 좋다.

SELECT teams.conference AS conference,
       players.school_name,
       COUNT(1) AS players
  FROM benn.college_football_players players
  JOIN benn.college_football_teams teams
    ON teams.school_name = players.school_name
 GROUP BY 1,2

college_football_players를 pre-aggregate 하면, join하는 row의 수를 줄일 수 있다.

SELECT teams.conference,
       sub.*
  FROM (
        SELECT players.school_name,
               COUNT(*) AS players
          FROM benn.college_football_players players
         GROUP BY 1
       ) sub
  JOIN benn.college_football_teams teams
  ON teams.school_name = sub.school_name

Explain

EXPLAIN을 쿼리 맨 앞에 놓으면, 쿼리의 수행계획을 보여주고. performance를 확인할 수 있다.

결과의 아래쪽부터 수행된다. WHERE먼저 수행 후 600개 row를 스캔하고 마지막으로 LIMIT이 수행된다.

댓글남기기