MS-SQL13 서브쿼리 (미완) 서브쿼리란? sql 명령문 안에 지정하는 하부 select 사용 예제 (WHERE문) -- rodrial01이 가장 연봉이 높다 select TOP 1 * FROM salaries ORDER BY salary DESC -- rodrial01의 정보 보기 select * FROM players WHERE playerID = 'rodrial01' -- 위의 내용들을 한번에 하기 -- 단일행 서브쿼리... select * FROM players WHERE playerID = (select TOP 1 playerID FROM salaries ORDER BY salary DESC) -- 다중행일 경우 IN을 사용 select * FROM players WHERE playerID IN (select .. 2022. 4. 6. Merge 조인, hash 조인 방식 Merge Join merge조인에는 many to many 와 one to many가 있다 여기서 many to many는 다대다 방식으로 outer 바깥쪽인 중복되는 데이터가 있다는 것이다. 여기서 바까쪽에서 one. 유일한 데이터들이 매우 중요하다... SELECT * FROM players AS p INNER JOIN salaries AS s ON p.playerID = s.playerID 여기서 실행계획을 살펴보면 merge join이고, many to many이다... 그런데 players에 p.playerID 는 인덱스가 걸려있다. (nonclustered)... 그런데 왜 indexScand을 할까? 이유는 nonClustered이니 해당 값을 가지고 Heap Table로 다시 가거나, C.. 2022. 4. 6. NestedLoop(Join) NestedLoop NestedLoop는 이중 포문에서 안쪽 포문이 해쉬를 사용한다고 보면된다. -- 실행계획을 보면 merge join을 사용한다고 나오있다 select * from players As p INNER JOIN salaries As s ON p.playerID = s.playerID OPTION(LOOP JOIN) 위에서 index seek가 발생했다는 것은 안쪽 부분인 인덱스를 활용해서 찾을 수 있다는 것이다. 바깥쪽은 for인데 안쪽은 해쉬정도라고 (map) 생각하면 될 것같다. player를 먼저하고 inner join을 salary로 했는데 바깥이 salary인 이유는 db차원에서 그것이 더 빠르기때문이다. NL 할 경우 내부에 인덱스가 걸려있는지 유무가 가장 중요하다. NL은 최.. 2022. 4. 6. Sorting Sorting db에서 정렬을 줄이는 것이 중요하다 왜 ? -> db는 데이터가 어마어마하게 많이 들어있기때문에 정렬이 한번 일어날때마다 매우 성능이 떨어진다. sorting이 언제 일어나는지 파악하고 줄일 수 있으면 노력하자! 정렬이 일어나는 경우는 MERGE SORT, ORDER BY, GROUP BY, DISTINCT, UNION, 이다 모두 확인해보자 group by select college, COUNT(college) from players where college LIKE 'C%' GROUP BY college COLLEGE 칼럼을 보면 인덱스가 걸려있지않다. union select college from players where college LIKE 'B%' .. 2022. 4. 6. 이전 1 2 3 4 다음