2012-11-26 5 views
0

I가 내가 값을 1로 시작하는 임시 테이블을 생성하여 몇 가지 최적화를 달성하기 위해 기대했다 request_id임시 테이블을 만드는 방법

SELECT request_id, exec_datetime FROM requests 
WHERE request_id mod 1000 = 1; 

에 기본 키를 활용하지 않는 다음 쿼리 모든 방법이 너무 1,000,000 1000 씩 증가가 나는 즉시이 테이블을 생성하는 데 사용하거나 실제로이 테이블을 작성해야합니까 구문이 있나요이

SELECT request_id, exec_datetime FROM requests 
WHERE request_id IN (SELECT id FROM table); 

같은 것을 수행 할 수 있다고?

편집

나는 쿼리가 빨리이 해결 방법 약 8 배를 실행 발견

CREATE TABLE dummy (
thousand INT(10) UNSIGNED, 
UNIQUE(thousand) 
); 

INSERT INTO dummy (SELECT request_id FROM requests WHERE request_id mod 1000=1); 

SELECT r.request_id, r.exec_datetime FROM requests r 
JOIN dummy d 
ON d.thousand = r.request_id; 

답변

1

아니, mysql을 위해 같은 값 (다른 데이터베이스는 포스트 그레스에게 을 예를 생성하는 구문이없는 do에는 그런 구문이 있습니다). 있을 경우 에 합치면 IN보다 우수합니다.

그러나 내가 용납 할 수 없을 정도로 저조한 증거가없는 한 매번 첫 번째 쿼리를 사용합니다.

+0

내가보기 ... 당신이 조인에 대한 제안을 사용하여 나의 유스 케이스의 성능 차이에 관심이 있다면, 내 편집을 체크 아웃! 또한 - 오늘 제가 게시 한 다른 질문을 볼 수 있습니까? http://stackoverflow.com/questions/13557405/when-running-explain-if-the-field-value-for-key-is-not-null-but-extra-is-blank – user784637

+0

또한 - mysql이 있습니까? 1에서 최대 1 백만까지 시작하는 모든 1000 개의 행을 삽입하는 구문? 'INSERT INTO dummy (SELECT request_id FROM 요청 WHERE request_id mod 1000 = 1);'와 같은 것입니다. 그러나 상한값은'request' 테이블의 최대 행 대신 나에 의해 정의됩니까? – user784637

관련 문제