2012-07-23 1 views
4

조인을 사용하여 데이터를 쿼리 할 수있는 테이블이 여러 개 있습니다.여러 테이블에서 여러 개의 선택을 수행하는 것이 더 좋습니까? 아니면 모든 테이블에서 모든 데이터를 하나 선택합니까?

내가 필요한 데이터를 여러 테이블에서 여러 선택을 실행해야합니다 데이터베이스 성능에 관해서

? 나는 1가를 선택 작성해야

또는

는 한 무리의 한 번에 모든 테이블에서 필요한 데이터를 선택하는 조인 사용?

편집 : 나는 선택을 위해 사용하는 것입니다 절은 테이블의 인덱스 필드를 포함

. 이 때문에 많은 조인과 함께 1 select 문을 사용하는 것이 더 빠릅니다. 그러나 여전히 성능 차이를 테스트 할 것입니다.

모든 위대한 답변 주셔서 감사합니다.

+3

일반적으로 단일 SELECT 문을 사용합니다. 관계형 데이터베이스는 쿼리 실행을 최적화 할 때 매우 유용합니다. 의심 스러울 경우, 항상 두 가지 접근법을 모두 프로파일 링하여 어떤 것이 더 잘 수행되는지 확인할 수 있습니다. – David

+0

나는 데이터베이스를 프로파일 링 한 적이 없다. 성능을 테스트하려면 어떻게합니까? – Mausimo

+0

그것은 전적으로 당신이 사용하고있는 데이터베이스에 달려 있습니다. 예를 들어 MS SQL Server의 경우 SQL Management Studio에서 쿼리 실행 계획을 확인하여 쿼리의 모든 단계를 자세히 분석 할 수 있습니다. MySQL에서는'EXPLAIN' 키워드를 사용하여 쿼리 실행 계획을 분석 할 수 있습니다. 일반적으로 성능을 테스트하기 위해 여러 옵션을 여러 번 수행하고 여러 번 수행하며 각 실행에 평균 소요 시간을 얻는 작은 응용 프로그램을 작성할 수 있습니다. – David

답변

3

조인과 함께 하나의 쿼리 만 작성하면됩니다. 성능이 걱정되는 경우 여러 옵션이 포함이 있습니다 : 당신은 그래서 당신은 하나 개의 테이블을 조회 할 수 있습니다 할 데이터의 지속 비정규 폼을 만들고 당신의 선택

  • 의 성능에 도움이 될 것입니다

    • 만들기 인덱스. 인덱스 된 뷰 또는 다른 테이블 일 가능성이 큽니다.
  • 3

    이 중 하나 일 수 있습니다. 일반적으로 조인이 일부 데이터 만 제한 할 수 있기 때문에 일반적으로 SQL을 직접 작성하는 경우 하나 일 수 있습니다.

    각 테이블의 한 레코드에 대해 다중 포인트 쿼리를 수행하는 경우 좋은 방법입니다. 조회를 위해 테이블의 기본 키를 사용하는 경우 각 쿼리의 연결 비용은 실제 쿼리보다 비쌉니다 .

    2

    테이블 연결 방식에 따라 다릅니다. 개별 테이블을 선택하는 것보다 모든 테이블의 교차 생성을 수행하는 것이 좋습니다. 그러나 테이블이 적절히 인덱스되고 여러 개의 선택을 가진 하나의 쿼리가 더 효율적일 것입니다.

    2

    테이블에 적절한 인덱스가있는 경우 JOIN을 사용하는 것이 더 나을 지 모르지만 종종 병목 현상의 원인이됩니다. 다중 선택 대신 데이터를 비정형 화하는 방법을 살펴볼 수 있습니다. 사용자가 여러 테이블에서 카운트 또는 타임 스탬프를 업데이트하는 작업을 수행 할 때 사용자가 이러한 테이블을 조인 할 필요가 없도록하는 것이 훨씬 "비쌉니다".

    쿼리 성능 튜닝에 가장 적합한 도구는 EXPLAIN을 사용하는 것입니다. 쿼리 전에 EXPLAIN을 입력하면 스캔되는 행 수를 볼 수 있습니다. 목표가 낮을수록 색인이 효과적입니다. 다른 하나는 인덱스를 만들 때 여러 필드에 복합 인덱스를 사용하고 WHERE 절에 나타나는 순서대로 왼쪽에서 오른쪽 순서로 정렬하는 것입니다. 당신은 쿼리하기 전에 EXPLAIN 입력 할 수 있습니다과 일치하는 스캔 행의 수가 10,000을 반환 할 수 있습니다

    SELECT id, name, description, status FROM sometable WHERE name LIKE '%someName%' AND status = 'Active'; 
    

    : 예를 들어

    당신은 sometable 10,000 행을 가지고있다.

    ALTER TABLE sometable ADD INDEX idx_st_search (name, status); 
    

    당신은 다음 다시 테이블에 EXPLAIN 수행하고 크게 개선 스캔 행과 성능을 숫자로 1을 반환 할 수 있습니다 : 당신은 복합 인덱스를 만들 수 있습니다.

    +0

    물론 정규화 위반도 단점을 가지고 있습니다. 거래에 대한 통제가 좀 더 정제되어야합니다. 또한 색인 열 순서는 대개 최신 DBMS의 where 절에 나타나는 방식과는 관련이 없습니다. 쿼리 구문을 분석하고 사용할 최적의 색인을 최적화합니다. –

    1

    테이블 디자인에 따라 다릅니다.

    시간의 대부분을 하나 개의 큰 쿼리가 더 있지만에서

    • 를 사용하여 기본 키에 반드시 어디만큼 당신이 할 수있는 조인과 같은 절.

    • 색인 된 필드를 사용하거나 where 절에 사용 된 필드의 색인을 만듭니다.

    관련 문제