복붙노트

[SQL] 하나 개의 레코드로 쿼리를 제한하면 성능을 향상합니까

SQL

하나 개의 레코드로 쿼리를 제한하면 성능을 향상합니까

테이블이 하나 개의 일치하는 결과가있는 경우 하나 개의 결과 레코드에 쿼리를 제한하는 것, 큰 (틱) MySQL의 테이블의 성능을 향상?

예를 들면

 select * from people where name = "Re0sless" limit 1

경우 해당 이름을 가진 하나의 레코드 만이있다? 그리고 이름이 고유의 기본 키 / 설정되어있는 경우에 대해 무엇을? 그리고 쿼리 가치 업데이트 또는 이득은 크지 않을 것인가?

해결법

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

    1.열이있는 경우

    열이있는 경우

    고유 인덱스 : 아니, 더 빠릅니다

    고유하지 않은 인덱스 : 어쩌면, 그것은 어떤 존재하는 경우, 첫 번째 일치를 넘어 추가 행을 보내는 방지 할 수 있기 때문에

    어떤 인덱스 : 때때로

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

    2.당신이 하나 약간 더 복잡한 쿼리를이 이상 조인 경우, LIMIT 절은 최적화 추가 정보를 제공합니다. 이 두 개의 테이블과 일치하는 모든 행을 반환 할 것으로 예상하는 경우, 해시 조인 일반적으로 최적입니다. 해시 조인 정합 다량 위해 최적화 조인의 유형이다.

    당신이 하나 약간 더 복잡한 쿼리를이 이상 조인 경우, LIMIT 절은 최적화 추가 정보를 제공합니다. 이 두 개의 테이블과 일치하는 모든 행을 반환 할 것으로 예상하는 경우, 해시 조인 일반적으로 최적입니다. 해시 조인 정합 다량 위해 최적화 조인의 유형이다.

    최적화는 LIMIT 1을 통과 한 알고 있다면 이제 그것은 많은 양의 데이터를 처리 할 수 ​​없습니다 것을 알고있다. 그것은 루프 조인을 되돌릴 수 있습니다.

    데이터베이스 (심지어 데이터베이스 버전)를 기반으로이 성능에 큰 영향을 미칠 수 있습니다.

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

    3.위해 귀하의 질문에 대답하려면 : 1) 예, 이름에 인덱스가없는 경우. 이 첫 번째 레코드를 찾습니다으로 쿼리는 즉시 종료됩니다. 한계를 벗고 그 때마다 스캔 전체 테이블을 할 수있다. 2) 아니오. 차 / 고유 키는 고유성을 보장받을 수 있습니다. 쿼리는 즉시이 행을 발견으로 실행 중지해야합니다.

    위해 귀하의 질문에 대답하려면 : 1) 예, 이름에 인덱스가없는 경우. 이 첫 번째 레코드를 찾습니다으로 쿼리는 즉시 종료됩니다. 한계를 벗고 그 때마다 스캔 전체 테이블을 할 수있다. 2) 아니오. 차 / 고유 키는 고유성을 보장받을 수 있습니다. 쿼리는 즉시이 행을 발견으로 실행 중지해야합니다.

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

    4.나는 LIMIT 데이터 세트를 발견하고 나는 그것이 전혀 어떤 변화를 기대하지 않을 것이다, 그래서 결과 세트가 구축 된 후 수행 할 것을 믿습니다. 이름을 기본 키를 만들기는 열의 만들어지고 인덱스가 발생합니다으로하지만 상당한 긍정적 인 영향을 미칠 것입니다.

    나는 LIMIT 데이터 세트를 발견하고 나는 그것이 전혀 어떤 변화를 기대하지 않을 것이다, 그래서 결과 세트가 구축 된 후 수행 할 것을 믿습니다. 이름을 기본 키를 만들기는 열의 만들어지고 인덱스가 발생합니다으로하지만 상당한 긍정적 인 영향을 미칠 것입니다.

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

    5."이름이"테이블에 고유 한 경우, 여전히 쿼리에 제한 제약 조건을 넣어 성능 (아주 아주 최소한의) 이득이있을 수 있습니다. 이름이 기본 키 인 경우, 가능성이 아무도 없을 것입니다.

    "이름이"테이블에 고유 한 경우, 여전히 쿼리에 제한 제약 조건을 넣어 성능 (아주 아주 최소한의) 이득이있을 수 있습니다. 이름이 기본 키 인 경우, 가능성이 아무도 없을 것입니다.

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

    6.데이터를 처리 할 때 예, 성능 차이를 알 수 있습니다. 하나 개의 기록은 여러 레코드보다 적은 공간을 차지합니다. 당신이 많은 행을 처리하지 않는 한,이 많이 차이하지 않을 것입니다,하지만 당신은 쿼리를 실행하면, 데이터는 비용이 많이 드는, 또는 프로그램 적으로 처리하는, 다시로 표시 할 수있다. 어느 쪽이든, 하나 개의 레코드는 여러보다 쉽습니다.

    데이터를 처리 할 때 예, 성능 차이를 알 수 있습니다. 하나 개의 기록은 여러 레코드보다 적은 공간을 차지합니다. 당신이 많은 행을 처리하지 않는 한,이 많이 차이하지 않을 것입니다,하지만 당신은 쿼리를 실행하면, 데이터는 비용이 많이 드는, 또는 프로그램 적으로 처리하는, 다시로 표시 할 수있다. 어느 쪽이든, 하나 개의 레코드는 여러보다 쉽습니다.

  7. from https://stackoverflow.com/questions/34488/does-limiting-a-query-to-one-record-improve-performance by cc-by-sa and MIT license