인생을 코딩하다.

[mySql, postgreSql] where절과 join절 작성 순서는 query의 성능과 연관이 있을까요? 본문

DataBase

[mySql, postgreSql] where절과 join절 작성 순서는 query의 성능과 연관이 있을까요?

Hyung1 2023. 5. 6. 03:33
728x90
반응형

where절 작성 순서는 query 성능과 연관이 있을까요?

SELECT *
FROM hyungil.user AS u
....
WHERE u.id = ?
	AND u.name = ?
    AND u.date = ?
  • 상관없습니다. Query Optimizer의 최적화 알고리즘에 의해 알아서 최적화됩니다. 비즈니스 로직의 순서에 맞춰서 작성하면 됩니다.

FROM절 작성 순서는 query 성능과 연관이 있을까요?

INNER JOIN

SELECT * 
FROM hyungil.A
INNER JOIN hyungil.B
		ON A.col = B.col
INNER JOIN hyungil.C
		ON C.col = B.col
  • INNER JOIN은 Query Optimizer의 최적화 알고리즘(순서가 달라도 결과가 같아야 한다.)에 의해 알아서 최적화됩니다. 비즈니스 로직의 순서에 맞춰서 작성하면 됩니다.

OUTER JOIN

SELECT * 
FROM hyungil.A
OUTER JOIN hyungil.B
		ON A.col = B.col
OUTER JOIN hyungil.C
		ON C.col = B.col
  • OUTER JOIN은 순서에 따라 결과가 바뀝니다. 따라서 Query Optimizer의 최적화되지 않고, 작성 순서와 동일하게 실행됩니다.

스키마 이름은 query 성능과 연관이 있을까요?

SELECT * FROM hyungil.A?
or
SELECT * FROM A?


결론부터 말씀드리자면 스키마 이름도 작성해주는게 좋습니다. sequence 입장에서는 개체 이름을 가지고 개체 유일성을 식별하고 확보하는데 있어서 스키마 이름 부분이 필요합니다. Query Optimizer에서는 스키마 이름을 찾기 위한 개체 이름 해석과정이 진행되게 되는데, 이때 스키마 이름이 생략되어 있다면, 스키마 이름을 찾기위한 불필요한 오버헤드가 발생합니다. 이 오버헤드는 아주 적지만 모이고 모이면 꽤나 큰 오버헤드가 될 것 입니다.
 

728x90
반응형
Comments