반응형

📝DB 인덱스 (Index)

DB 인덱스(Index)는 데이터베이스에서 검색 속도를 향상시키기 위해 사용되는 데이터 구조이다

인덱스 생성 방법으론 다양한 게 있지만 기본적으로 INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼을 사용해야하고(인덱스를 생성할 때 성능 이슈가 발생) JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼에 효과적이다.

카디널리티가 높은 컬럼을 사용하는게 좋다.

인덱스를 사용하는 것 만큼이나 생성된 인덱스를 관리해주는 것도 중요하다. 그러므로 사용되지 않는 인덱스는 바로 제거를 해주는게 좋다 

 

 

 

📝DB Cursor(커서)

커서는 기본적으로 행 단위 반복처리(for/wihle)를 가능하게 합니다. (한 행씩 읽어서 처리)

DB 서버가 쿼리 결과를 메모리나 디스크에 잡아두기 때문에 부하가 들어갑니다.

 

SELECT id, my_function(id)
FROM big_table;
# --------------------------
CALL my_procedure();

함수보다는 프로시져에서 더 많이 사용합니다. 함수의 경우 big_table이 100행이 있으면 100에 해당하는 걸 다 실행시키기 때문에 커서가 100번 사용되지만 프로시져의 경우는 1번만 사용 됩니다.

 

 

📝함수(function)

특정 계산을 수행하며 쿼리 내에서 계산된 값을 반환한다. (하나의 값을 반환하는 계산식에 적합)

대부분 트랜잭션을 지원 안 하기 때문에 INSERT, UPDATE, DELETE가 안에 들어가면 제어가 힘들어집니다.

계산하고 반환하는데 중점을 두기 때문에 주로 SELECT문에서 많이 사용한다. (아래 예제처럼 필드처럼 호출이 가능)

SELECT get_keywords();

 

 

📝프로시저(procedure)

특정 작업을 수행하며 리턴값이 없을 수 있다

트랜잭션 기능을 지원합니다.

프로시저는 주로 데이터 조작 작업(INSERT, UPDATE, DELETE)이나 특정 비즈니스 로직을 수행하는 데 사용하며 단독으로 실행이 가능하다

함수처럼 매개변수를 받을 수 있고 특정 작업들을 수행하지만 뭔가를 반환하는 것보다는 일련의 함수 동작을 수행한다

→ 물건 구매했을 때 구매목록 테이블에 데이터 INSERT되고 배송 테이블에 데이터 INSERT되고 등... 여러 행위를 하나로 묶은 프리시저를 만들어서 활용할 수 있다

CALL UpdateEmployeeSalary(1, 50000);

 

 

 

📝BigInt, SmallInt

 

  • SMALLINT
    • 2바이트, 값 범위 작음, 저장 공간 절약
  • BIGINT
    • 8바이트, 값 범위 큼, 초대규모 데이터에 필요

 

반응형