[MySQL] MySQL Function

코린이·2025년 5월 27일

MySQL

목록 보기
16/23

✅ MySQL Function

MySQL에는 크게 세 가지 함수가 있다.

  • Built-in Function : 내장 함수로 MySQL에서 기본으로 제공해 주는 함수
  • Stored Function : 사용자가 직접 쿼리문을 사용하여 정의한 함수, MySQL 서버에 함수를 생성/저장하여 사용한다.
  • User Defined Function : C/C++ 등 프로그래밍 언어를 사용하여 MySQL 서버에 프러그인 형태로 사용하는 함수

▶︎ Deterministic VS Not Deterministic

MySQL에서 Deterministic은 "확정적"이라는 의미를 가지고 있다.

  • Deterministic(확정적) : 입력(인자값)이 동일하면 언제든지 항상 출력값이 동일함을 의미
  • Not Deterministic(비확정적) : 입력(인자값)이 동일하더라도 출력값이 다름을 의미

MySQL에서 Deterministic Function은 같은 입력 값이 주어졌을 때 항상 동일한 결과를 반환하는 함수를 의미한다.

이는 함수 내부에서 외부 상태(예: 현재 시간, 랜덤 값, 테이블 조회 등)에 의존하지 않기 때문이다.

따라서 동일한 인자값으로 호출되면, 데이터 상태에 변화가 없는 한 항상 동일한 결과를 반환한다.

예: ABS(-10) → 항상 10 반환 (Deterministic)

반면, NOW()RAND(), SYSDATE() 처럼 시점이나 외부 상태에 따라 결과가 달라지는 함수는 Non-Deterministic 함수이다.

  • 예외적으로 NOW() 함수는 Deterministic 처럼 동작한다.
  • sysdate-is-now 설정을 통해 SYSDATE()함수도 Deterministic 처럼 동작할 수 있다.

MySQL은 이러한 함수 구분을 통해 뷰, 저장 함수, 파티션 키, 인덱싱, 복제 등에서 처리 방식을 달리 적용한다.

성능 측면에서 보면, Deterministic 함수는 옵티마이저가 결과를 예측할 수 있어
인덱스를 활용할 가능성이 높고, 쿼리 성능이 더 유리한 경우가 많다.

반면, Not Deterministic 함수는 결과가 실행 시마다 달라질 수 있기 때문에
인덱스 사용이 어렵고, 종종 전체 테이블 스캔(full scan)으로 처리될 수 있다.

▶︎ Stored Function 생성 주의 사항

MySQL에서 Stored Function을 생성할 때, DETERMINISTIC 또는 NOT DETERMINISTIC을 명시하지 않으면 기본적으로 NOT DETERMINISTIC으로 설정된다.

  • 특별한 경우가 아니라면, 성능적인 부분을 고려하여 DETERMINISTIC을 명시하여 작성하는게 좋다.

또한, 보안 및 권한 관리 측면에서도 다음과 같은 옵션을 명시하는 것이 좋다:

  • DEFINER = <사용자> : 함수 실행 권한을 명확히 설정

  • SQL SECURITY INVOKER : 함수를 호출한 사용자의 권한으로 쿼리를 실행하게 설정 (기본은 DEFINER)

이러한 옵션들을 설정함으로써, 보안성과 유지보수성을 높일 수 있다.

0개의 댓글