해결된 질문
24.09.18 15:16 작성
·
23
0
안녕하세요
deterministic 관련해서 궁금증이 있어 질문드립니다.
그럼 mysql stroed function을 생성할때 무조건 deterministic 으로 생성을 해야하는지요??
예를들면,
함수 내에는 파라미터값을 받아서 select 결과값을 도출하는 가령, id값등등 있다고 가정하겠습니다.
그럼 select * from test where 함수('value') 등으로 넣어서 값을 도출받아 where 조건에 걸수있다고 가정해보면
non deterministic 일 경우 fullscan을 탈거같은데요.
결론적으로 , 모든 함수를 전부 deterministic 으로 명시를 해줄경우 단점이 무엇인가요??
감사합니다.
답변 2
0
2024. 09. 24. 12:05
안녕하세요.
결론적으로 , 모든 함수를 전부 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
궁금한 점이 더 있으면 언제든지 질문해 주세요. 감사합니다.