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
이 수행된다.
댓글남기기