inflearn logo
강의

Khóa học

Chia sẻ kiến thức

MySQL thực sự Phần 1 - Phần 1

Ep.05 Chức năng lưu trữ

deternmistic 질문

Đã giải quyết

174

gomadafter

7 câu hỏi đã được viết

0

안녕하세요

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

 

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

예를들면,

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

 

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

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

 

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

 

감사합니다.

mysql dbms/rdbms backend query-tuning mysql-query

Câu trả lời 2

0

sungucklee2062

안녕하세요.

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

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

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

 

감사합니다.

0

communityai8509

안녕하세요, 인프런 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

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

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