sourcecode

쿼리를 하나의 레코드로 제한하면 성능이 향상됩니까?

codebag 2023. 11. 4. 10:39
반응형

쿼리를 하나의 레코드로 제한하면 성능이 향상됩니까?

테이블에 일치하는 결과가 하나만 있는 경우 쿼리를 하나의 결과 레코드로 제한하고 큰 MySQL 테이블의 성능을 향상시킬 수 있습니까?

예를들면

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

그 이름을 가진 기록이 하나뿐이라면?만약에name기본 키가 고유하게 설정되었습니까? 쿼리를 업데이트할 가치가 있습니까? 아니면 이득이 최소입니까?

열이 있는 경우

고유 지수: 아니, 더 이상 빠르지 않습니다.

비unique 인덱스: 아마도, 만약 존재한다면, 그것은 첫번째 일치된 행을 초과하는 추가적인 행을 보내지 못하게 하기 때문일 것입니다.

no index:

  • 하나 이상의 행이 쿼리와 일치하는 경우, 첫 번째 행이 일치하면 전체 테이블 검색이 중지되므로 예.
  • 쿼리와 일치하는 행이 없으면 전체 테이블 검색을 완료해야 하기 때문에 없습니다.

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

이제 옵티마이저가 사용자가 LIMIT 1을 통과했다는 것을 알게 되면 대량의 데이터를 처리하지 못할 것이라는 것을 알게 됩니다.루프 조인으로 되돌릴 수 있습니다.

데이터베이스(그리고 심지어는 데이터베이스 버전)에 따라 성능에 엄청난 영향을 미칠 수 있습니다.

질문에 순서대로 답하기: 1) 예, 이름에 색인이 없는 경우.쿼리는 첫 번째 레코드를 찾는 즉시 종료됩니다. 제한을 해제하고 매번 전체 테이블 스캔을 수행해야 합니다.2) 아니요. 기본/unique 키는 고유하게 보장됩니다.쿼리가 행을 찾자마자 실행을 중지해야 합니다.

LIMIT는 데이터 세트를 찾고 결과 세트를 구축한 후에 수행하는 작업이라 생각하기 때문에 아무런 차이가 없을 것 같습니다.기본 키의 이름을 지정하면 열에 대한 인덱스가 만들어지기 때문에 상당한 긍정적인 효과가 있습니다.

표에서 "이름"이 고유한 경우에도 쿼리에 제한 제약 조건을 적용하여 성능이 (매우 최소) 향상될 수 있습니다.이름이 기본 키라면 아무 것도 없을 가능성이 높습니다.

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

언급URL : https://stackoverflow.com/questions/34488/does-limiting-a-query-to-one-record-improve-performance

반응형