일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- regex
- JavaScript
- jsp
- 정규화표현식
- String
- for문
- Set
- jar
- jdbc
- 참조타입
- controller
- 형변환
- JCF
- java
- DB
- Selector
- 자바
- html
- 자바스크립트
- SQL
- scope
- 환경설정
- interface
- iBATIS
- mybatis
- extends
- 자료구조
- jquery
- 알고리즘
- 개선
- Today
- Total
프로그래밍공부노트
SQL DETERMINISTIC 선언 활용 본문
Oracle Function 사용하는 과정에서
함수 내에서는 수행되는 SQL들은 큰 문제가 없으나 해당 함수가 조인 조건 및 스칼라 서브 쿼리 등에 사용되어 수행 횟수가 상당히 많은 편이라서 개선이 필요한 경우가 발생
해당 문제를 해결하기 위한 방안으로
DETERMINISTIC 선언
함수를 직접 수정하여 해당 수행 횟수를 개선하는 방법으로
아래처럼 RETURN 아래에 DETERMINISTIC을 선언해주면 된다.
CREATE FUNCTION my_function(...)
RETURN ...
DETERMINISTIC
BEGIN
-- 함수 본문
END;
SQL에서 Deterministic이란 용어는 함수나 프로시저의 실행 결과가 항상 동일한 경우를 의미합니다. 즉, 함수나 프로시저가 동일한 입력값을 받으면 항상 동일한 출력값을 반환해야 합니다.
여기서 중요한 점은
1. 동일성 : 동일한 입력값에 대해 항상 동일한 출력값을 반환해야 한다. 이는 함수가 외부의 상태나 다른 데이터에 의존하지 않고, 오직 입력값에만 의존하여 동작하는지를 의미한다.
2. 순수 함수 : Deterministic 함수는 '순수 함수'의 개념과 유사합니다. 즉, 부수 효과(side effects)가 없어야 하며, 입력값 외에 외부 상태에 의존하지 않아야 합니다.
(동일성과 유사한 의미로 다른 데이터에 의존하지 않고 입력값에 의해서만 동작하는 함수여야 한다.)
3. 최적화 가능성 : Deterministic 함수는 쿼리 옵티마이저에 의해 더 효율적으로 처리될 수 있습니다. 예를 들어, 동일한 입력값에 대해 캐싱이 가능하거나, 인덱스를 효과적으로 활용할 수 있다.
Deterministic 속성이 없는 함수는 Non-deterministic 함수라고 부르며, 이는 예를 들어 현재 시간이나 무작위 값을 반환하는 함수 등이 포함된다. 이러한 함수들은 쿼리 실행 시마다 결과가 달라질 수 있다.
SQL에서 함수를 작성할 때 Deterministic 속성을 명시하거나 기본적으로 간주하는 데이터베이스 시스템에 따라 다를 수 있습니다. 따라서 함수를 정의할 때 이 속성을 고려하여 적절히 선택하고 사용하는 것이 중요하다.
반복적인 입력값에 의한 Function 호출 횟수가 많은 경우 ! DETERMINISTIC을 선언하면 캐싱 효과를 보면서 호출 횟수를 줄일 수 있다.
'DB' 카테고리의 다른 글
Day 22 - DB(JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN(ORACLE DB만) (0) | 2021.03.13 |
---|---|
Day 20 - DB( ROWNUM, CEIL, FLOOR, NULL, 공집합, 명시적 변환, 암시적 변환) (0) | 2021.03.11 |
Day 19 - DB(CREATE, ALTER, INSERT, DELETE) (0) | 2021.03.09 |
Day 18 - DB(DB 구조, 제약조건, SELECT) (0) | 2021.03.08 |
Day 17 - DB(서버, DB, Tomcat, Oracle,dbeaver) (0) | 2021.03.05 |