MySQL에는 크게 세 가지 함수가 있다.
MySQL에서 Deterministic은 "확정적"이라는 의미를 가지고 있다.
MySQL에서 Deterministic Function은 같은 입력 값이 주어졌을 때 항상 동일한 결과를 반환하는 함수를 의미한다.
이는 함수 내부에서 외부 상태(예: 현재 시간, 랜덤 값, 테이블 조회 등)에 의존하지 않기 때문이다.
따라서 동일한 인자값으로 호출되면, 데이터 상태에 변화가 없는 한 항상 동일한 결과를 반환한다.
예: ABS(-10) → 항상 10 반환 (Deterministic)
반면, NOW() 나 RAND(), SYSDATE() 처럼 시점이나 외부 상태에 따라 결과가 달라지는 함수는 Non-Deterministic 함수이다.
NOW() 함수는 Deterministic 처럼 동작한다.SYSDATE()함수도 Deterministic 처럼 동작할 수 있다.MySQL은 이러한 함수 구분을 통해 뷰, 저장 함수, 파티션 키, 인덱싱, 복제 등에서 처리 방식을 달리 적용한다.
성능 측면에서 보면, Deterministic 함수는 옵티마이저가 결과를 예측할 수 있어
인덱스를 활용할 가능성이 높고, 쿼리 성능이 더 유리한 경우가 많다.반면, Not Deterministic 함수는 결과가 실행 시마다 달라질 수 있기 때문에
인덱스 사용이 어렵고, 종종 전체 테이블 스캔(full scan)으로 처리될 수 있다.
MySQL에서 Stored Function을 생성할 때, DETERMINISTIC 또는 NOT DETERMINISTIC을 명시하지 않으면 기본적으로 NOT DETERMINISTIC으로 설정된다.
또한, 보안 및 권한 관리 측면에서도 다음과 같은 옵션을 명시하는 것이 좋다:
DEFINER = <사용자> : 함수 실행 권한을 명확히 설정
SQL SECURITY INVOKER : 함수를 호출한 사용자의 권한으로 쿼리를 실행하게 설정 (기본은 DEFINER)
이러한 옵션들을 설정함으로써, 보안성과 유지보수성을 높일 수 있다.