문제

쿼리를 하나의 결과 레코드로 제한하면 테이블에 일치하는 결과가 하나만 있는 경우 대규모(ish) MySQL 테이블의 성능이 향상됩니까?

예를 들어

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

그 이름을 가진 레코드가 하나만 있다면?그렇다면 어떨까요? name 기본 키가 고유하게 설정되었나요?쿼리를 업데이트할 가치가 있습니까? 아니면 이득이 최소화됩니까?

도움이 되었습니까?

해결책

열에

고유 인덱스:아니요, 더 빠르지 않아

고유하지 않은 인덱스:아마도, 첫 번째 일치 항목 이후에 추가 행을 보내는 것을 방지하기 때문입니다(있는 경우).

색인 없음:때때로

  • 하나 이상의 행이 쿼리와 일치하는 경우 , 첫 번째 행이 일치되면 전체 테이블 스캔이 중단되기 때문입니다.
  • 쿼리와 일치하는 행이 없으면 아니요, 전체 테이블 스캔을 완료해야 하기 때문입니다.

다른 팁

하나 이상의 조인이 포함된 약간 더 복잡한 쿼리가 있는 경우 LIMIT 절은 최적화 프로그램에 추가 정보를 제공합니다.두 테이블을 일치시키고 모든 행을 반환할 것으로 예상되는 경우 해시 조인 일반적으로 최적입니다.해시 조인은 대량 매칭에 최적화된 조인 유형입니다.

이제 최적화 프로그램이 LIMIT 1을 통과했다는 것을 알게 되면 많은 양의 데이터를 처리하지 않을 것이라는 것을 알게 됩니다.다음으로 되돌릴 수 있습니다. 루프 조인.

데이터베이스(및 데이터베이스 버전)에 따라 이는 성능에 큰 영향을 미칠 수 있습니다.

질문에 순서대로 대답하려면:1) 네, 이름에 대한 색인이 없으면 그렇습니다.쿼리는 첫 번째 레코드를 찾는 즉시 종료됩니다.제한을 없애고 매번 전체 테이블 스캔을 수행해야 합니다.2) 아니요.기본/고유 키는 고유함이 보장됩니다.쿼리는 행을 찾는 즉시 실행을 중지해야 합니다.

나는 LIMIT가 데이터 세트가 발견되고 결과 세트가 구축된 후에 수행되는 작업이라고 생각하므로 전혀 차이가 없을 것이라고 기대합니다.이름을 기본 키로 설정하면 해당 열에 대한 인덱스가 생성되므로 상당히 긍정적인 효과가 있습니다.

"이름"이 테이블에서 고유한 경우 쿼리에 제한 제약 조건을 적용하면 성능이 여전히 (매우 최소한의) 향상될 수 있습니다.이름이 기본 키인 경우 기본 키가 없을 가능성이 높습니다.

예, 데이터를 처리할 때 성능 차이를 느낄 수 있습니다.하나의 레코드는 여러 레코드보다 적은 공간을 차지합니다.많은 행을 처리하지 않는 한 이는 큰 차이가 없지만 일단 쿼리를 실행하면 데이터가 다시 표시되어야 하며 이는 비용이 많이 들거나 프로그래밍 방식으로 처리됩니다.어느 쪽이든 하나의 레코드가 여러 개보다 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top