본문 바로가기

TIL(Today I Learned)

TIL-230912(쿼리 최적화)

📝오늘 공부한 것

  • 쿼리 최적화

 

알게 된 점

[ 쿼리 최적화 ]

데이터베이스의 성능을 향상시키기 위해 신중한 SQL 쿼리를 작성하는 프로세스

 

개발중에는 액세스하고 테스트하는 데이터의 양이 적다. 그래서, 개발자는 자신이 작성한 쿼리에 대해 빠른 response를 받는다. 그러나 프로젝트가 시작되고 많은 양의 데이터가 데이터베이스에 넘쳐나기 시작하면 문제가 시작된다. 이러한 인스턴스는 SQL 쿼리 응답 속도를 크게 저하시키고 성능 문제를 야기한다.

 

대규모 데이터로 작업할 때는 아주 사소한 변경이라도 성능에 큰 영향을 미칠 수 있다.

 

방법

1. 적절한 인덱싱

인덱스는 데이터베이스 테이블에서 데이터 검색작업 속도를 향상시키는 데이터구조이다.

적절한 인덱싱을 통해 데이터베이스에 더 빠르게 액세스할 수 있으며, 행을 선택하거나 정렬할 때 속도가 향상된다.

 

2. SELECT * 대신 SELECT <columns> 사용

SELECT* 를 사용하는 대신 필요한 열은 SELECT절에 지정한다.

불필요한 열을 선택하는 것은 데이터베이스에 추가 부하를 발생시키기 때문에 단일 SQL뿐만 아니라 전체 시스템의 속도도 저하시킬 수 있다.

 

👎🏻

SELECT * FROM EMPLOYEE;

👍🏻

SELECT NICKNAME, PHONENUMBER, ADDRESS FROM EMPLOYEE;

 

3. 루프에서 쿼리 실행을 피하기

루프내에서 SQL쿼리를 실행하면 전체 시퀀스 속도가 느려진다. 루프에서 쿼리를 실행하는 대신에 상황에 따라 대량 삽입을 하거나 업데이트를 사용할 수 있다.

-> 1000개의 행을 추가해야할때 1000번의 INSERT 쿼리를 실행하는 대신, 하나의 대량 INSERT 쿼리를 실행하여 훨씬 빠르게 데이터를 추가할 수 있다.

 

4. record 존재 확인하기

일반적으로 개발자는 레코드가 존재하는 지 확인을 위해 EXITS() 또는 COUNT() 쿼리를 사용한다.

EXIT()는 일치하는 레코드를 찾는 즉시 종료되므로 더 효율적이다.

반면에 COUNT()는 레코드가 첫번째 행에서 발견되더라도 전체 테이블은 검색한다.

 

5. 상관 하위 쿼리 사용 피하기

상관 하위 쿼리는 상위 쿼리 또는 외부 쿼리에 따라 달라진다.

상관 하위 쿼리는 외부 쿼리에 의존하며 행단위로 실행되기 때문에 전체 프로세스 속도를 느리게 만든다.

-> 이러한 상황에서 JOIN을 사용하여 해결하기

 

6. 와일드카드 문자열을 잘 사용해라

와일드카드 문자는 검색 필드 내의 모든 레코드에서 일치하는 항목을 찾을 수 있다.

와일드카드 사용시 접두사 또는 접미사로 사용될 수 있다.

종료 와일드카드와 함께 선행 와일드카드(%)를 사용하면 선택한 필드 내의 모든 레코드에서 일치하는 항목을 검색한다.

 

7. 연산자의 RHS에서 SQL 함수를 사용하지 않기

SQL 쿼리에서 함수나 메서드를 사용하는 것은 성능을 저하시킬 수 있다.

함수를 사용하는 대신 쿼리를 잘 구성해야 한다.

 

8. 항상 제한된 데이터를 검색하고 정확한 결과를 타겟팅

데이터를 최소한으로 검색할수록 쿼리 실행이 빨라집니다.

서버 측에서 가능한 한 많은 필터를 적용하여 데이터를 제한하고, 더 빠른 결과를 얻을 수 있습니다.

 

9. 대량 데이터를 로드하기 전에 인덱스 삭제

대량의 행을 온라인 시스템에 삽입하려면 인덱스가 없는 임시 테이블을 사용한다.

이후 임시 테이블에서 데이터를 기본 테이블로 이동하는 것은 외부 소스에서 데이터를로드하는 것보다 훨씬 빠르기 때문에 인덱스를 삭제하고 다시 생성하는 것이 좋다.

 

10. HAVING 대신 WHERE을 사용

HAVING절은 모든 행이 선택된 후 행을 필터링한다.

WHERE 절을 사용하여 데이터를 필터링하는 것이 더 효율적이다.

HAVING 절은 WHERE 절 이후에 계산된다.

 

 

 

https://www.mantralabsglobal.com/sql-query-optimization-tips/

 

Top 10 SQL Query Optimization Tips to Improve Database Performance

Use these SQL Query optimization tips from Mantra Lab’s Senior Tech Lead to make your mobile and web applications faster and more accurate.

www.mantralabsglobal.com

https://medium.com/watcha/%EC%BF%BC%EB%A6%AC-%EC%B5%9C%EC%A0%81%ED%99%94-%EC%B2%AB%EA%B1%B8%EC%9D%8C-%EB%B3%B4%EB%8B%A4-%EB%B9%A0%EB%A5%B8-%EC%BF%BC%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-7%EA%B0%80%EC%A7%80-%EC%B2%B4%ED%81%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-bafec9d2c073

 

✅ 쿼리 최적화 첫걸음 — 보다 빠른 쿼리를 위한 7가지 체크 리스트

DB에 대한 데이터 분석가의 에티켓

medium.com