제목 | WHERE IN 구문으로 최대 30개 뽑기, LIMIT 순서? | ||
---|---|---|---|
카테고리 | DB | ||
글쓴이 | 엽토군 | 작성시각 | 2020/06/02 17:47:38 |
|
|||
안녕하세요. 지금 이런 MSSQL 쿼리들을 돌리고 있습니다. -- 쿼리1 SELECT foo_id FROM FOO WHERE user_id = ? -- 대충 사용자번호 GROUP BY foo_id ORDER BY created_at DESC; -- 쿼리2 SELECT TOP 30 * FROM BAR JOIN DEE ON ... LEFT JOIN MEH ON ... WHERE DEE.foo_id IN ( ? ); -- 쿼리1에서 뽑은 foo_id 목록 FOO 테이블에서 최신순으로 키를 뽑아서 DEE 테이블의 참조값으로 지정해 최대 30개의 BAR 를 뽑는 쿼리입니다. 둘을 붙여쓰지 않고 순서대로 따로 불러서 쓰는데 왜냐하면 FOO 테이블 자체도 (로그성이라서) 무겁거니와 FOO와 BAR가 서로 다른 DB에 있다 보니 붙여쓰면 속도가 보장이 안돼서 그렇습니다. 질문은: 1. 쿼리2의 정렬은 쿼리1의 정렬과 다르게 되나요? (현재 테스트해볼 자료셋이 많지 않아서 직접 돌려보질 못했습니다. 일반적으로 어떤지 궁금합니다.) 2. 쿼리2에서 top30 으로 자르는 대신 쿼리1에서 top30 으로 자르는 건 결과나 동작이나 의미상의 차이가 있을까요? 3. 만약 쿼리2의 BAR가 CTE라면 앞의 두 질문 답은 달라지나요? 4. (번외질문) 속도를 안 늦추고 두 쿼리를 합칠 만한 노하우가 없을까요? 뭔가 성가신 질문을 한꺼번에 많이 올린 거 같은데 궁금해서 질문 올립니다. 답변 주시면 학습에 도움이 될 거 같습니다. 감사합니다. |
|||
다음글 | php 출력 (2) | ||
이전글 | 코드이그나이터로 웹페이지 만들고 나서 (4) | ||
kaido
/
2020/06/02 18:07:37 /
추천
0
|
차분히 생각하시면 충분히 해결점까지 도달 하실것 같습니다. 화이팅 !