deternmistic 질문
안녕하세요
deterministic 관련해서 궁금증이 있어 질문드립니다.
그럼 mysql stroed function을 생성할때 무조건 deterministic 으로 생성을 해야하는지요??
예를들면,
함수 내에는 파라미터값을 받아서 select 결과값을 도출하는 가령, id값등등 있다고 가정하겠습니다.
그럼 select * from test where 함수('value') 등으로 넣어서 값을 도출받아 where 조건에 걸수있다고 가정해보면
non deterministic 일 경우 fullscan을 탈거같은데요.
결론적으로 , 모든 함수를 전부 deterministic 으로 명시를 해줄경우 단점이 무엇인가요??
감사합니다.
Câu trả lời 2
0
안녕하세요.
결론적으로 , 모든 함수를 전부 deterministic 으로 명시를 해줄경우 단점이 무엇인가요??
함수가 NOT-DETERMISTIC이어야 하는 경우가 있지 않을까 싶긴 한데요. 왠만한 서비스 요건에서는 이런 경우를 거의 보지 못했었어요. 그래서 서비스별로 요건을 검토해서 NOT-DETERMINISTIC일 필요가 없다면, 반드시 Stored Function에 DETERMINISTIC 키워드를 명시해서 사용하는 방법을 권장드린 것입니다.
이건 서비스의 특성에 따른 요건이기 때문에, 단정적으로 모두 DETERMINISTIC으로 정의해서 사용해도 된다고 제가 말씀드리긴 어려운 부분인 듯 합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
gomadafter님, 질문해주셔서 감사합니다. MySQL에서 DETERMINISTIC과 NON-DETERMINISTIC 함수에 대한 고민이 있으신 것 같습니다.
MySQL에서 함수 생성 시 DETERMINISTIC이나 NON-DETERMINISTIC으로 명시하는 이유는 그 함수가 동일한 입력값에 대해 늘 동일한 출력을 반환하는지 여부에 따라 옵티마이저가 다양한 최적화 전략을 사용할 수 있기 때문입니다.
DETERMINISTIC 함수는 동일한 입력값에 대해 항상 동일한 출력을 반환하는 함수입니다. 이러한 특성을 이용해 MySQL의 옵티마이저는 좀 더 효율적인 쿼리 계획을 세워 빠른 쿼리 실행을 할 수 있습니다. 하지만 모든 함수를 DETERMINISTIC으로 명시하는 것은 몇 가지 단점을 가지고 있을 수 있습니다:
정확하지 않은 명시: 실제로
NON-DETERMINISTIC함수인데도DETERMINISTIC으로 잘못 명시할 경우 쿼리 결과가 잘못될 수 있습니다. 예를 들어, 현재 시각을 반환하는 함수는NON-DETERMINISTIC이어야 하지만 이를DETERMINISTIC으로 명시하면 옵티마이저가 잘못된 가정을 할 수 있습니다.유지 관리 문제: 모든 함수를 일일이
DETERMINISTIC으로 명시하면 코드의 가독성 및 유지 관리가 어려울 수 있습니다. 함수의속성 변화를 추적하고 관리하는데도 추가적인 노력이 필요합니다.퍼포먼스 영향: 모든 함수를
DETERMINISTIC으로 선언하면 퍼포먼스가 항상 향상되는 것은 아닙니다. 특히, 입출력에 따라 실행되는 다른 SQL 문이 많은 경우라면 이러한 최적화가 큰 이점이 없을 수 있습니다.
따라서 함수가 실제로 DETERMINISTIC 특성을 갖추고 있고, 이를 통해 옵티마이저가 더 나은 계획을 세울 수 있는 경우에만 DETERMINISTIC으로 명시하는 것이 좋습니다.
추가적으로 Spring 데이터 JDBC 관련 자료를 찾으시고 싶으시면, 다음 링크들을 참고해 주세요:
- Spring Data - Community Forum
- Pivotal Sofware
궁금한 점이 더 있으면 언제든지 질문해 주세요. 감사합니다.
Commit 응답받기 전 네트워크 문제가 발생하면
1
64
1
14분44초에 쿼리 질문드립니다.
0
72
2
ep12. (2) LEFT JOIN 사용 방법 준수 - 오타 질문
0
75
2
ep.12 count(*) 질문
0
67
2
레코드 수정시 저장공간이 부족하면
0
81
2
복합 index 문의
0
87
2
강의
0
82
1
LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?
0
107
2
GAP 락에 대한 질문 드립니닷..!
0
194
1
ORDER BY가 필요한 이유
0
177
2
[오타 제보] 선행 데이터를 기반으로 한 데이터 분석
0
165
1
2강. VARCHAR(255) 저장되는 데이터의 길이 정보 질문
0
448
2
LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이
0
319
2
MySQL Where절 내 조건의 순서
0
393
2
1강. delete marking된 데이터의 정리 주기는 어느 정도인가요?
0
238
2
Mysql table avg_row_length
0
144
1
12강 FULL GROUP BY
0
135
2
ep11) Prepared Statement에서 질문
0
145
2
7)select for update 강의에서 질문
0
229
2
12강. LEFT JOIN 사용 방법 준수 5:42
0
240
2
6강. Top N 데이터 조회와 관련해 질문있습니다.
0
195
2
5강에서 사례로 언급하신 DETERMINISTIC 예제에 대해 질문있습니다.
0
145
1
1강 CHAR타입에 대해 질문드립니다
0
230
1
EXPLAIN ANALYZE 수행 시 쿼리 실행 계획이 예상과 다릅니다.
0
251
1

