2010-08-04 6 views
3

내 웹 응용 프로그램에서 트위터에있는 사용자의 친구 중 어느 것이 이미 시스템에 존재하는지 확인하고 싶습니다 ... 현재 내가하고있는 일은 사용자가 속한 Twitter ID 목록을 얻는 것입니다 (트위터 API는 한 번에 ID를 5000를 반환) 다음과 수행 :큰 세트의 SELECT IN

SELECT userId FROM users WHERE userId IN (COMMA_SEPARATED_LIST_OF_IDs); 

나는 때문에 테이블이 성장하는 사용자로,이 쿼리에 대한 편안하지 않습니다,이 병 목 것을 입증 할 수 있습니다. 너무 성급하게 최적화하고 싶지는 않습니다. 이렇게해야하는 다른 방법이 있습니까?

업데이트 : MySQL을 사용하고 있습니다.

+1

어떤 데이터베이스를 사용하고 있습니까? –

+0

정말로 * 얼마나 많은 * 또는 실제로 * * *를 의미합니까? –

+0

나는 그 질문을 편집했다. – jack33

답변

2

새 테이블을 만들고 사용자가 따라 다니는 모든 트위터 ID를 저장할 수 있습니다. 그런 다음 이미 시스템에 누가 있는지 확인하는 것은 색인 된 열에 대한 간단한 조인입니다. Twitter API를 사용하여 재량에 따라 해당 테이블을로드하고 업데이트 할 수 있습니다.

+0

임시 테이블을 생성하고 조인을 수행 한 다음 SELECT IN (expr)을 사용하는 것보다 삭제하는 것이 오버 헤드가 될까요? expr은 최대 5000 개의 값을 가질 수 있습니다. 현재 팔로우 테이블을 영구적으로 유지할 필요가 없습니다. – jack33

+0

임시 테이블 옵션을 선택할 때마다이 옵션을 사용하지 않는 것이 좋습니다. 그러나 테스트를 거쳐 수행 방법을 확인하십시오. 데이터를 영구히 보관할 필요는 없지만 보관하지 않을 이유가 거의 없을 것입니다. – Fosco

3

두 가지 접근 방법 :

  1. SELECT IN (expr)expr에 대한 SELECT 표현을 할 수 있습니다. 나는. 데이터베이스는 여기서 많은 양의 데이터를 처리 할 수 ​​있습니다.

  2. 조인을 사용하십시오.

1

users.userId가 기본 키라고 가정합니다. 그렇다면 이미 인덱싱되므로 조회가 이미 효율적이어야합니다. COMMA_SEPARATED_LIST_OF_IDS이 (가) 이성을 초월하여 성장할 것으로 기대하십니까?

+0

트위터는 사용자가 5000 명을 초과하는 경우 5k 배치로 userIds를 제공합니다. 따라서 COMMA_SEPARATED_LIST_OF_IDS는 최대 5000 개의 ID가됩니다. – jack33

관련 문제