본문 바로가기
[MSSQL][SQL SERVER] SQL 성능 최적화: 캐싱과 동적 평가(Dynamic Evaluation)의 함정 연말연초라 그런지 프로그램 사용량이 늘어 성능 이슈가 늘었다. 업무상 성능 개선이 시급히 필요한 시점에서 SQL 튜닝을 하면서 새로 배운 점을 정리하고자 한다. (쿼리나 함수명, 변숫값은 예제로 새로 작성하였다.)문제의 쿼리: 병목WHERE a.Status LIKE '%' + @InputStatus + '%' -- 문제 부분실행계획을 분석해보니 위의 LIKE 연산자 조건 비교 부분에서 프로시저 전체의 56%에 달하는 비용이 발생하고 있었다. LIKE 연산자로 검색하려는 문자열의 앞에 '%'가 올 경우 인덱스를 활용하지 못한다. LIKE 조건에 일치하는 패턴을 찾아야 하는데 찾고자 하는 값이 문자열의 어느 부분에서 시작하는지 알 수 없으므로 전체를 스캔해야 하기 때문이다.@InputStatus는 'Orde.. 2025. 1. 5.
[대용량 이미지 태깅]대용량 이미지 업로드를 위한 Presigned URL 사용과 CORS 에러 해결 과정 사용자가 평소에 저장만 하고 다시 보지 않는 캡처 이미지에서 정보를 추출하고 정리하는 Django + Python를 통해 구현하고자 한다. 목표과 방법목표대용량 이미지 업로드 시스템을 구축하는 것이 목표였다. 서버 부하를 줄이고, 업로드 속도를 최적화하면서 보안도 강화해야 했다. 이를 위해 Presigned URL을 사용하기로 했다.Presigned URL?Presigned URL은 AWS S3에서 제공하는 기능으로, 클라이언트가 서버를 거치지 않고 S3에 직접 파일을 업로드하거나 다운로드할 수 있도록 임시 권한을 부여하는 URL이다. 이 URL은 만료 시간과 접근 권한이 포함되어 있어, 지정된 시간 이후에는 접근이 불가능하다.임시 접근 권한: URL은 생성 시점에 설정된 시간까지만 유효하다.제한된 권한.. 2024. 12. 22.
[SQL조인][조인 순서] 왜 조인을 할 때 ON절에서 조인 대상 테이블의 alias가 먼저 올까 ON절의 alias 순서가 JOIN에 미치는 영향SELECT a.customer_id, a.customer_name, b.order_id, b.order_dateFROM customers AS aJOIN orders AS bON b.customer_id = a.customer_id; ON절은 왜 다들 이렇게 작성할까'ON b.customer_id = a.customer_id'조인을 위한 ON절에서 흔히 조인 대상이 되는 테이블의 alias를 먼저 적은 쿼리를 흔히 볼 수 있다.SQL JOIN을 처음 가르쳐주시던 강사님도, 회사 선배도 다 저렇게 쓰길래 관례거니 하고 써왔는데 막상 왜 b가 a 앞에 오는지는 제대로 고민해 본 적이 없었다. 왜 다들 JOIN 키워.. 2024. 10. 25.