Development/SQL
[Troubleshooting] 쿼리 최적화 : Subquery -> JOIN
문제상황 개발 환경은 eGovFramework에서 ibatis XML을 사용해 query를 날리고, DB는 CUBRID이다. 기존 쿼리는 아래와 같고, 시간은 약 200초로 응답이 너무 오래 걸려 기능 개선 요청이 들어온 상황이다. table명, column명은 맥락과 비슷하게 조금 수정했지만 전체 query의 구조는 동일하게 작성했다. 분석 일단 코드를 보면 개판이다. 학과 종류에 따라 subject에서 무슨 값을 가져올지가 다른데, 이 로직 하나 때문에 나머지 subquery 전체가 복사+붙여넣기이다. 따라서, 이 부분을 해결할 수 있는 방법을 고민하는 것이 첫 번째 문제이다. 두 번째로, 실행계획이다. 이 query를 아주 간단하게 표현하면 아래와 같으며, WHERE EXISTS문 subquery가..
[DB] MySQL 등 ERD에서 id를 long으로 두는 이유
먼저, sql table의 primary key를 id라는 이름으로, 특별한 값을 넣지 않고 long이나 int형으로 숫자로 많이 두곤 한다. sql에서 join이나 data 탐색 등의 경우의 수를 생각해 봤을 때, primary key에 유의미한, 그리고 식별이 되는 값을 넣는게 좋지 않을까? 실제로 성능은 이게 더 나올 것이다. 그러나 이렇게 하지 않는 이유는 1) 보안상의 이유 2) 확장성의 이유 크게 2가지가 있다고 생각한다. 먼저 primary key는 어떤 일이 있더라도 겹치면 안 된다는 것은 기본이다. 예를 들어서 member라는 table에 id를 member가 회원가입할 때 등록했던 id로 지정했다고 해 보자. 그러면 member.id는 varchar형태일 것이고, id는 중복이 되지 않..