2011-03-03 3 views
1

여러 변수가 테이블 수, 열 수, 반환 된 행 수, 사용 된 인덱스 등이 방정식의 일부라는 것을 알고 있습니다. 그러나 전체적으로 말하면큰 결합 또는 다중 가져 오기가 가장 효율적입니까?

여러 개의 쿼리를 실행하는 것이 더 효율적입니다 5+) 조인 대부분의 테이블은 주 테이블의 행에 해당하는 정보가있는 행을 포함하며 리턴 된 결과는 20.000 행 범위에 있습니다. 인수를 위해 첫 번째 테이블에 생성 날짜가있는 사용자가 포함되어 있으며이 날짜에 사용자를 선택하기로 결정했다고 가정 해 보겠습니다. 다른 테이블에는 세션 정보, 사용자 노트 등과 같은 항목이 들어 있습니다. 모든 사용자를 선택해야하지만 보조 테이블의 필드 값에 따라 한 사용자의 세션 데이터를 무시하고 다른 사용자의 세션 데이터로 일부 작업을 수행 할 수 있습니다 사용자가 결과를 확인할 때 이렇게하면 한 번의 쿼리에서 필요한 모든 데이터를 얻을 수 있지만 동시에 일부 사용자에게는 일부 중복 데이터가 발생할 수 있습니다.

또는 날짜별로 사용자를 선택하는 것이 더 효율적일까요? 결과를 반복 할 때 필요할 때마다 다른 테이블에서 데이터를 가져옵니다.

반환 된 행에 대한 작업이 PHP5 +에서 완료되었다고 가정 해 보겠습니다.

+2

"전반적으로 말하면"우리는이 질문에 정말로 대답 할 수 없습니다. 당신은 * 일반화 된 * 질문에 대한 * 특정 * 답변을 찾고있는 것으로 보입니다. 그건 불가능하다. –

+2

@Andrew : 아, 그럴 수 있습니다. 불가능한 것은 일반적인 질문에 대한 정확한 * 특정 답변입니다! –

답변

1

벤치 마크를 해봅시다.

"필요한 경우"의 빈도에 따라 달라집니다. 사용자의 10 %에 대해 추가 날짜가 필요한 경우 seconde 접근 방식이 더 좋습니다. 90 %를 필요로한다면 큰 쿼리 하나로 모든 것을 검색하는 것이 좋습니다.

0

테이블에 적절한 인덱스 인 (많은 경우 도움이 됨, 조인 할 때 유용)을 사용하면 하나의 단일 SQL 쿼리가 약간 복잡한 경우에도 여러 쿼리보다 빠를 수 있습니다. PHP와 MySQL 서버 사이의 교환.


(그러나 물론, 특정 상황에서 가장 적용 무엇인지 확실히 알 수있는 유일한 방법은 그들을 벤치마킹, 두 솔루션을 테스트하는 것입니다!) 큰 가입

1

.

나는 그 사실을 뒷받침 할 증거가 전혀 없음을 인용 할 수 있습니다. 그러나 필자는 몇 가지 경험을 통해 말하고 있습니다. 우리가 작업하는 시스템에서 몇 가지 큰 쿼리가 아닌 수백만 개의 간단한 쿼리 만 수행하고 모든 데이터 집약적 작업에는 오래 걸립니다. 예를 들어, 직접 SQL로드가 2 분 내에 수행 할 수있는 데이터를로드하는 데는 한 시간이 걸립니다. 쿼리 당 비용이 방정식을 완전히 지배합니다.

관련 문제