티스토리 뷰

임시테이블을 쓰는 경우는 여러가지가 있겠지만,

다음 예제는 select시 in문 대신 temporary table을 사용하는 법이다.




만약 id가 1,2,3,4,5 인 것을 가져와야 한다고 하자.

쿼리는 이렇게 된다.


 SELECT * FROM TABLE 

 WHERE ID IN (1,2,3,4,5)


만약 검색할 ID의 개수가 1,000개 이상이라면??...




방안중에 하나로 임시테이블을 쓸 수 있다.


IN문에 들어갈 번호들을 임시테이블에 쫙 넣고, 

임시테이블과 테이블과 INNER JOIN을 하는것이다.


예제 ㄱㄱ





1. 임시테이블 생성


 CREATE TEMPORARY TABLE IF NOT EXISTS TEMP_TABLE (

       ID BIGINT(20) NOT NULL 

)


2. 임시테이블에 INSERT (일반 INSERT문과 똑.같.다)


INSERT INTO TEMP_TABLE (ID) VALUES (#{id})



3. SELECT 하기 (임시테이블과 이너조인)

임시테이블에 있는 아이디번호와 테이블에 있는 아이디가 같은 것을 뽑아내야하므로(교집합)

INNER JOIN이다.


SELECT COUNT(1) FROM TEMP_TABLE AS A
INNER JOIN
(SELECT * FROM TABLE) B

ON A.ID = B.ID


4. 테이블 값 삭제하기

세션 끝나면 테이블이 자동 DROP 되나, 

세션 유지될 때 계속 테이블에 값이 누적될 수 있으므로, 수동으로 삭제해야할 경우 사용

DELETE도 일반 테이블과 사용법이 다름 없음

난 이것때매 값이 계속 누적됐었음 ㅋㅋㅋ


 DELETE FROM TEMP_TABLE

  




*** 주의할 점 


- 클라이언트마다 각자 다른 임시테이블을 부여받아 사용한다.


- TEMPORARY TABLE은 임시테이블이 생성된 세션에서만 그 테이블을 사용 가능하다.


- 세션이 끝나면 테이블이 자동 삭제(DROP)된다.



세션 단위라는거!!!!!!!!



 


+ 추가


oracle은 in문의 개수를 1,000개로 제한한다고 하며,

mysql은 

The number of values in the IN list is only limited by the max_allowed_packet value.

이라고 한다.



댓글
댓글쓰기 폼