데이터베이스 쿼리 속도는 애플리케이션의 성능에 큰 영향을 미칠 수 있습니다. 느린 쿼리는 사용자 경험을 저하시키고, 서버 자원을 낭비하며, 비즈니스 성과에 부정적인 영향을 줄 수 있습니다.

 

인덱스 사용 최적화

인덱스는 데이터베이스에서 특정 열에 대한 검색을 빠르게 하기 위한 데이터 구조입니다. 인덱스를 적절하게 사용하면 쿼리 성능이 크게 향상될 수 있습니다.

ex)

SELECT * FROM children WHERE last_name = 'Sam';

위 쿼리에 대해 last_name열에 인덱스를 추가하면 성능이 향상됩니다.

CREATE INDEX idx_last_name ON children(last_name);

 

쿼리 계획 분석 - https://workspace-2308.tistory.com/entry/MySQL-Explain

 

MySQL Explain 실행계획

Explain 쿼리에 대한 데이터를 어떻게 불러오는지에 대한 실행계획을 의미합니다. 즉, 데이터베이스 엔진에 의해 쿼리가 실행되는 방법에 대한 자세한 분석을 제공합니다. MySQL 에서 Explain을 사용

workspace-2308.tistory.com

 

조인 최적화

복잡한 조인 쿼리는 성능 저하의 주된 원인 중 하나입니다. 조인 순서를 최적화하고 필요한 경우 인덱스를 추가하면 성능을 향상시킬 수 있습니다.

ex)

SELECT orders.id, children.name 
FROM orders 
JOIN children ON orders.children_id = children.id;

이 경우 orders.customer_id, customers.id에 인덱스를 추가하면 향상됩니다.

CREATE INDEX idx_orders_children_id ON orders(children_id);
CREATE INDEX idx_children_id ON children(id);

 

LIMIT 및 페이징 사용

대량의 데이터를 조회 할 경우 LIMIT , 페이징을 사용하여 성능을 향상시킬 수 있습니다.

ex)

  •  첫 열개의 행만 조회
SELECT * FROM children ORDER BY created_at DESC LIMIT 10;
  •  페이징을 사용하여 10개씩 데이터 조회
SELECT * FROM children ORDER BY created_at DESC LIMIT 10 OFFSET 20;

 

쿼리 캐싱

ex) redis사용

import redis

# Redis 클라이언트 설정 (redis 기본포트 : 6379)
r = redis.Redis(host='localhost', port=6379, db=0)

# 캐싱된 데이터 조회
cached_data = r.get('children_243')

if cached_data is None:
    # 캐시된 데이터가 없으면 데이터베이스에서 조회
    children = db.query('SELECT * FROM children WHERE id = 243')
    r.set('children_243', children)
else:
    children = cached_data

 

반응형

'SQL' 카테고리의 다른 글

Mysql - dump 백업하기  (0) 2023.04.13
JSON_EXTRACT 데이터 추출  (0) 2023.04.04
MySQL - UNIXTIME 변환  (0) 2023.03.28
MySQL Explain 실행계획  (0) 2023.03.08
MySQL Convert UNIX TimeStamp  (0) 2023.02.16

+ Recent posts