본문 바로가기
728x90
반응형

SQL4

[MySQL] FULL PARALLEL 병렬처리 서론몇 백만 건 이상의 데이터를 조회하게되면 Timeout 이슈가 발생할 수 있다.FULL, PARALLEL 등 병렬 SQL 처리에 대한 개념을 확인해보면서 적용 방안에 대해 생각해보자.시리얼 SQL vs 병렬 SQL시리얼 SQL소량의 데이터 처리에 적합, 시스템 영향도가 적음, 온라인 처리 시스템SQL> SELECT COUNT(*) FROM 고객 c;하나의 프로세스가 SQL 조건에 맞는 데이터를 모두 검색하여 반환병렬 SQL대용량 처리에 적합, 시스템 자원 점유, DSS/배치 서버Oracle SQL> SELECT /*+ FULL(c) PARALLEL(c 4) */ * FROM 고객 c;MySQL에서는 병렬처리를 위해 innodb_parallel_read_threads 시스템 변수를 제어할 수 있다.My.. 2024. 7. 29.
[Java] Mybatis Column '{컬럼명}' in IN/ALL/ANY subquery is ambiguous 해결 서론Mybatis 코드 개선 작업에서 발생한 이슈를 정리해본다.Cause: java.sql.SQLIntegrityConstraintViolationException: Column '{컬럼명}' in IN/ALL/ANY subquery is ambiguous;해당 이슈는 여러 테이블과 서브쿼리, 조인(join)을 사용하는 SQL 문에서동일한 컬럼 이름이 여러 테이블에 존재할 때 발생할 수 있다.문제 발생 SQL 예제아래 SQL은 서브쿼리 안에서 id 컬럼이 모호한 문제가 있다.SQL 엔진은 서브쿼리 내에서 어느 테이블의 id 컬럼을 사용해야 하는지 결정할 수 없다.SELECT a.id, a.name, b.status FROM table1 aLEFT JOIN table2 .. 2024. 7. 19.
[SQL] 불필요한 쿼리 제거 작업 서론자신이 작업한 코드를 포함한 모든 결과물은 Legacy가 된다.다만, 개선하려는 시점의 주제가 무엇이냐에 따라 알고리즘 개선이 될지 비즈니스 로직 개선이 될지 결정될 수 있다.실무를 수행하면서 2년 전 mybatis로 개발된 SQL에서 시스템 고도화에 따라 사용할 수 없거나 불필요한 쿼리가 발견되어 최적화를 위해 해결하던 도중 간단한 이론에 대해 정리해본다.이론적 배경SQL 쿼리는 어떻게 동작하는가?1) FROM : 어느 테이블에서 찾을 것인가?2) JOIN : 어떤 테이블을 연관지을 것인가?3) ON : 연관 조건은 어떤 것인가?4) WHERE : 어떤 필터를 적용할 것인가?5) GROUP BY : 값을 기준으로 그룹화를 수행할 것인가?6) HAVING : WHERE과 유사하지만 그룹에 대한 필터를.. 2024. 5. 8.
커서 페이지네이션 구현 들어가며... 모바일 환경에서 적합한 스크롤 위주의 페이지 호출로 마지막 idx를 기준으로 다음 리스트를 호출하는 커서 페이지네이션을 개발한다. 준비사항 리스트 데이터를 호출하는 API 명세 Endpoint View를 개발하는 담당자와 협의 필요 마지막 idx 정보 필요 사항 정리 첫 번째 페이지 호출 N 번째 페이지 호출 코드 반영 if last_idx == 0: statement = select( Table.table_idx, ).order_by( Table.table_idx.desc() ).limit(20) else: statement = select( Table.table_idx, ).where( Table.table_idx < last_idx ).order_by( Table.table_idx.d.. 2022. 5. 9.
728x90
반응형