아래 예를 들겠습니다.
Select name, sw_id
from sw_info
where sw_id = '100'
여기에 특정 코드의 코드명을 가져오는 스칼라 함수를 만들어서 리턴하도록 추가합니다.
fc_codename(code) -> 리턴값은 코드명입니다.
Select name, sw_id, dbo.fc_codename(code)
from sw_info
where sw_id = '100'
위 펑션에는 테이블 조회도 없고 단순히 코드에 대한 코드명만 리턴하도록 되어 있습니다.
정말 성능상에 아~무 영향이 없을듯 한데 펑션을 셀렉트해서 조회하는 것만으로
100건을 조회할때 0.05-> 3초내외 로..
10000건 조회하니 몇분.... 사용을 못할 수준으로 부하가 있네요....
오라클 쿼리에서는 부하가 거의 없다 시피하는데...
ms-sql에선 여러건으로 조회되는 결과에 대해서 스칼라펑션을 추가하면 안되는건가요? 빠르게 호출하는 방법이 있는지 궁금합니다...
Comment 3
-
처리짱
2023.07.07 19:00
-
모카모카
2023.07.10 14:25
아... 단순한 함수라도.. select 에 함수포함은 지양해야겠네요.. 고견 감사합니다!!
-
이리
2023.07.12 10:38
오라클에는 함수 결과 캐시 기능이 작동해서 성능에 문제가 없었을 수 있습니다.
SQL Server는 2019부터 optimizer가 함수를 인라인으로 처리하면 성능이 개선 될 수 있습니다.
Microsoft SQL Server의 스칼라 UDF 인라인 처리 - SQL Server | Microsoft Learn
물론 함수가 복잡하지 않고 여러군데서 사용하지 않는 다면 함수 대신 쿼리문으로 작성하는것이 제일 좋은 방법 이라고 생각합니다.
함수는 사용 안하는게 좋습니다.
100건을 조회하면 함수안에서 100번의 SELECT가 일어 나겠죠..
조인으로 바꾸시는게 좋지 않을까 싶네요.