인프런 커뮤니티 질문&답변

gomadafter님의 프로필 이미지
gomadafter

작성한 질문수

Real MySQL 시즌 1 - Part 1

Ep.05 Stored Function

deternmistic 질문

해결된 질문

작성

·

46

0

안녕하세요

deterministic 관련해서 궁금증이 있어 질문드립니다.

 

그럼 mysql stroed function을 생성할때 무조건 deterministic 으로 생성을 해야하는지요??

예를들면,

함수 내에는 파라미터값을 받아서 select 결과값을 도출하는 가령, id값등등 있다고 가정하겠습니다.

 

그럼 select * from test where 함수('value') 등으로 넣어서 값을 도출받아 where 조건에 걸수있다고 가정해보면

non deterministic 일 경우 fullscan을 탈거같은데요.

 

결론적으로 , 모든 함수를 전부 deterministic 으로 명시를 해줄경우 단점이 무엇인가요??

 

감사합니다.

답변 2

0

이성욱님의 프로필 이미지
이성욱
지식공유자

안녕하세요.

결론적으로 , 모든 함수를 전부 deterministic 으로 명시를 해줄경우 단점이 무엇인가요??

함수가 NOT-DETERMISTIC이어야 하는 경우가 있지 않을까 싶긴 한데요. 왠만한 서비스 요건에서는 이런 경우를 거의 보지 못했었어요. 그래서 서비스별로 요건을 검토해서 NOT-DETERMINISTIC일 필요가 없다면, 반드시 Stored Function에 DETERMINISTIC 키워드를 명시해서 사용하는 방법을 권장드린 것입니다.

이건 서비스의 특성에 따른 요건이기 때문에, 단정적으로 모두 DETERMINISTIC으로 정의해서 사용해도 된다고 제가 말씀드리긴 어려운 부분인 듯 합니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

gomadafter님, 질문해주셔서 감사합니다. MySQL에서 DETERMINISTICNON-DETERMINISTIC 함수에 대한 고민이 있으신 것 같습니다.

MySQL에서 함수 생성 시 DETERMINISTIC이나 NON-DETERMINISTIC으로 명시하는 이유는 그 함수가 동일한 입력값에 대해 늘 동일한 출력을 반환하는지 여부에 따라 옵티마이저가 다양한 최적화 전략을 사용할 수 있기 때문입니다.

DETERMINISTIC 함수는 동일한 입력값에 대해 항상 동일한 출력을 반환하는 함수입니다. 이러한 특성을 이용해 MySQL의 옵티마이저는 좀 더 효율적인 쿼리 계획을 세워 빠른 쿼리 실행을 할 수 있습니다. 하지만 모든 함수를 DETERMINISTIC으로 명시하는 것은 몇 가지 단점을 가지고 있을 수 있습니다:

  1. 정확하지 않은 명시: 실제로 NON-DETERMINISTIC 함수인데도 DETERMINISTIC으로 잘못 명시할 경우 쿼리 결과가 잘못될 수 있습니다. 예를 들어, 현재 시각을 반환하는 함수는 NON-DETERMINISTIC이어야 하지만 이를 DETERMINISTIC으로 명시하면 옵티마이저가 잘못된 가정을 할 수 있습니다.

  2. 유지 관리 문제: 모든 함수를 일일이 DETERMINISTIC으로 명시하면 코드의 가독성 및 유지 관리가 어려울 수 있습니다. 함수의속성 변화를 추적하고 관리하는데도 추가적인 노력이 필요합니다.

  3. 퍼포먼스 영향: 모든 함수를 DETERMINISTIC으로 선언하면 퍼포먼스가 항상 향상되는 것은 아닙니다. 특히, 입출력에 따라 실행되는 다른 SQL 문이 많은 경우라면 이러한 최적화가 큰 이점이 없을 수 있습니다.

따라서 함수가 실제로 DETERMINISTIC 특성을 갖추고 있고, 이를 통해 옵티마이저가 더 나은 계획을 세울 수 있는 경우에만 DETERMINISTIC으로 명시하는 것이 좋습니다.

추가적으로 Spring 데이터 JDBC 관련 자료를 찾으시고 싶으시면, 다음 링크들을 참고해 주세요:
- Spring Data - Community Forum
- Pivotal Sofware

궁금한 점이 더 있으면 언제든지 질문해 주세요. 감사합니다.

gomadafter님의 프로필 이미지
gomadafter

작성한 질문수

질문하기