복붙노트

[SQL] 합니까 외래 키 쿼리 성능을 향상?

SQL

합니까 외래 키 쿼리 성능을 향상?

내가 2 개 테이블, 제품 및 ProductCategories 있다고 가정합시다. 두 테이블 카테고리 ID에 관계를 가지고있다. 그리고 이것은 쿼리입니다.

SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;

내가 실행 계획을 만들 때, 테이블 ProductCategories 수행하는 클러스터 지수는 추구 기대로이다. 그러나 테이블 제품을 위해, 그것은 나를 의심하게 클러스터 인덱스 스캔을 수행합니다. 왜 FK 쿼리 성능을 향상시키는 데 도움이되지 않습니다?

나는 Products.CategoryId에 인덱스를 만들 필요가 그래서. 내가 다시 실행 계획을 만들 때 두 테이블은 인덱스가 추구 수행합니다. 그리고 추정 된 하위 트리 비용이 많이 감소한다.

내 질문이 있습니다 :

해결법

  1. ==============================

    1.외래 키는 참조 무결성 도구가 아닌 성능 도구입니다. SQL Server의 적어도 FK의 창조는 관련 인덱스를 생성하지 않으며, 모든 FK이 시간까지 모양을 개선하기 위해 필드에서 당신은 인덱스를 생성해야합니다.

    외래 키는 참조 무결성 도구가 아닌 성능 도구입니다. SQL Server의 적어도 FK의 창조는 관련 인덱스를 생성하지 않으며, 모든 FK이 시간까지 모양을 개선하기 위해 필드에서 당신은 인덱스를 생성해야합니다.

  2. ==============================

    2.외래 키는 향상시킬 수 있습니다 (상처) 성능

    외래 키는 향상시킬 수 있습니다 (상처) 성능

    편집하다

    링크는 지금 쇼에게 외래 키가 개선 (상처) 성능 이유의 요지를 다음, (몰래 크리스로 명성을) 죽은 것 같다으로.

    외래 키는 성능을 향상시킬 수 있습니다

  3. ==============================

    3.외부 키는 데이터베이스 무결성을 보장하는 DBMS 개념이다.

    외부 키는 데이터베이스 무결성을 보장하는 DBMS 개념이다.

    모든 성능에 미치는 영향 / 개선 사항은 사용중인 데이터베이스 기술에 구체적 및 외래 키의 목적에 부차적 인 것이다.

    모든 외래 키가 그들에 적어도 비 클러스터형 인덱스가 있는지 확인하기 위해 SQL Server의 좋은 방법입니다.

    난 당신이 투명 도료의 물건을 희망하지만, 더 자세한 정보를 요청하여 주시기 바랍니다.

  4. ==============================

    4.가장 좋은 성능 좋은 방법은 자주 사용하는 필드에 인덱스를 사용하는 것입니다. 당신은 SQL Server를 사용하는 경우 특정 데이터베이스를 프로파일 프로파일 사용하고 출력하는 파일을하고 인덱스를 배치하는 위치에 대한 권장 사항을받을 튜닝 마법사를 사용할 수 있습니다. D : 또한 긴 저장 실행 절차를 플러시 프로파일 러를 사용하여 같은 내가, 내가 10 최악의 범죄자 내가 매주 게시 목록 상단이 사람들에게 정직을 유지합니다.

    가장 좋은 성능 좋은 방법은 자주 사용하는 필드에 인덱스를 사용하는 것입니다. 당신은 SQL Server를 사용하는 경우 특정 데이터베이스를 프로파일 프로파일 사용하고 출력하는 파일을하고 인덱스를 배치하는 위치에 대한 권장 사항을받을 튜닝 마법사를 사용할 수 있습니다. D : 또한 긴 저장 실행 절차를 플러시 프로파일 러를 사용하여 같은 내가, 내가 10 최악의 범죄자 내가 매주 게시 목록 상단이 사람들에게 정직을 유지합니다.

  5. ==============================

    5.당신은 쿼리를보다 효율적으로 활용할 수 있도록 사용할 수 있습니다. 대신 컬럼에 널 (null)이 있는지 확인 필요없이 SQL 서버 necesity을 제거하는 내부 하나의 외부 조인을 사용하는 SQL Server의 구조 조정 쿼리에 당신을 허용한다. 당신은 당신을 위해 때문에 외래 키 관계에서 이미 inforces을 그 규정을 둘 필요가 없습니다.

    당신은 쿼리를보다 효율적으로 활용할 수 있도록 사용할 수 있습니다. 대신 컬럼에 널 (null)이 있는지 확인 필요없이 SQL 서버 necesity을 제거하는 내부 하나의 외부 조인을 사용하는 SQL Server의 구조 조정 쿼리에 당신을 허용한다. 당신은 당신을 위해 때문에 외래 키 관계에서 이미 inforces을 그 규정을 둘 필요가 없습니다.

    그래서 이건:

        select p.ProductId, p.Name, c.CategoryId, c.Name AS Category 
    from Products p inner join ProductCategories c on p.CategoryId = c.CategoryIdwhere c.CategoryId = 1;
    

    이되다 :

    SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category 
    FROM ProductCategories c 
    LEFT OUTER JOIN Products P ON
    c.CategoryId = p.CategoryId 
    WHERE c.CategoryId = 1;
    

    이것은 반드시 작은 쿼리에 큰 성과를하지 않습니다,하지만 테이블이 커질 때보다 효율적이 될 수 있습니다.

  6. ==============================

    6.MySQL은 5.7, 그것은 확실히 조인 놀라 울 정도로 잘 다수를 포함하는 쿼리 속도를 높일 수 있습니다!

    MySQL은 5.7, 그것은 확실히 조인 놀라 울 정도로 잘 다수를 포함하는 쿼리 속도를 높일 수 있습니다!

    내 쿼리를 이해하기 '를 설명'을 사용하고 내가 4-5 테이블에 합류 한 것을 발견 - 더 키가 전혀 사용되지 않았다. 나는 아무것도하지 않았다하지만이 테이블에 외래 키를 추가하고 결과를, loadTime에서 90 % 감소했다. 했다 쿼리> 5 초 지금은 500ms 이하를 취할.

    즉 거대한 개선!

    다른 언급이 그리고, 당신은 관계 무결성을 보장의 추가 보너스를 얻을.

    이 외에도, 참조 무결성을 보장하는 것은 물론 자신의 성능상의 이점을없는거야. 그것은 외래 키가있는 테이블이 외부 테이블 '최신'것을 보장하는 2 차 효과가 있습니다. 당신은 사용자 테이블과 코멘트 테이블이 말, 당신은 코멘트 테이블에 대한 통계를하고 있습니다. 당신이 어려운 사용자를 삭제하면 아마, 당신도, 더 이상 자신의 의견을 싶지 않아요.

  7. ==============================

    7.단순히 외래 키 열을 찾으려고하는 ProductCategories 테이블 데이터베이스에 레코드를 삽입하는 경우 말, 성능이 향상되지 않습니다 테이블의 외래 키를 추가하는 것은 제품 테이블의 기본 키 값에 존재하는 값을 가지며,이 모습까지, 작업은 데이터베이스에 오버 헤드 당신이 ProductCategories 테이블에 새 항목을 추가 할 때마다입니다. 데이터베이스 성능을 향상 않겠지 만 외부 키를 추가하여 그래서 그것은 당신의 데이터베이스의 무결성에 대한 처리됩니다. 당신은 당신이 외래 키를 사용하여 무결성을 확인하는 대신 기록을 확인하기 위해 많은 쿼리를 실행하는 경우 데이터베이스에 존재하는이 프로그램에 DB를 예 그것은 성능이 향상됩니다.

    단순히 외래 키 열을 찾으려고하는 ProductCategories 테이블 데이터베이스에 레코드를 삽입하는 경우 말, 성능이 향상되지 않습니다 테이블의 외래 키를 추가하는 것은 제품 테이블의 기본 키 값에 존재하는 값을 가지며,이 모습까지, 작업은 데이터베이스에 오버 헤드 당신이 ProductCategories 테이블에 새 항목을 추가 할 때마다입니다. 데이터베이스 성능을 향상 않겠지 만 외부 키를 추가하여 그래서 그것은 당신의 데이터베이스의 무결성에 대한 처리됩니다. 당신은 당신이 외래 키를 사용하여 무결성을 확인하는 대신 기록을 확인하기 위해 많은 쿼리를 실행하는 경우 데이터베이스에 존재하는이 프로그램에 DB를 예 그것은 성능이 향상됩니다.

  8. ==============================

    8.나는 많은 SQL 서버에 대해 알고 있지만, 오라클의 경우, 외래 키 열을 가진 데이터 로딩의 성능이 저하되지 않습니다. 데이터베이스가 각 삽입에 대한 데이터의 무결성을 검사 할 필요가 있기 때문이다. 그리고 네, 이미 언급 한 바와 같이, 외부 키 컬럼에 인덱스를 가지는 것은 좋은 연습입니다.

    나는 많은 SQL 서버에 대해 알고 있지만, 오라클의 경우, 외래 키 열을 가진 데이터 로딩의 성능이 저하되지 않습니다. 데이터베이스가 각 삽입에 대한 데이터의 무결성을 검사 할 필요가 있기 때문이다. 그리고 네, 이미 언급 한 바와 같이, 외부 키 컬럼에 인덱스를 가지는 것은 좋은 연습입니다.

  9. ==============================

    9.SQL 서버 2008 년 외래 키는 데이터베이스 엔진이 쿼리를 최적화하기 위해 선택하는 방법에 영향을 미치는 성능에 영향을 미칠 수있다. https://technet.microsoft.com/en-us/library/2008.04.dwperformance.aspx 다음 글에서 추론에 참여 스타를 참조하십시오

    SQL 서버 2008 년 외래 키는 데이터베이스 엔진이 쿼리를 최적화하기 위해 선택하는 방법에 영향을 미치는 성능에 영향을 미칠 수있다. https://technet.microsoft.com/en-us/library/2008.04.dwperformance.aspx 다음 글에서 추론에 참여 스타를 참조하십시오

  10. from https://stackoverflow.com/questions/507179/does-foreign-key-improve-query-performance by cc-by-sa and MIT license