programing

MySQL 임시 테이블 vs where in 절

sourcejob 2022. 11. 24. 21:38
반응형

MySQL 임시 테이블 vs where in 절

문제는 이렇다.

가지러 가야겠어*식탁에서User컬럼에phoneNumberphoneNumberArray전화번호는 300~1000개 정도 있어요테이블Userphone Number 에 인덱스가 있어 수백만 개의 회선을 포함할 수 있습니다.

임시 테이블을 만드는 것이 좋을까요?UserphoneNumbers모든 전화번호를 입력하고JOIN또는 심플한WHERE IN1000개의 전화번호 배열을 전달할 수 있을까요?

흥미로운 질문입니다.두 번째 방법(배열 내에 값을 배치하는 방법)을 사용하는 데는 많은 논쟁이 있습니다.

임시 테이블을 사용하는 것은 무리한 선택사항은 아니지만 응용프로그램이 상당히 복잡해집니다.읽기 및 쓰기 오버헤드가 데이터베이스에 추가됩니다.애플리케이션은 테이블을 생성하여 로드해야 합니다(데이터베이스가 테이블을 삭제합니다).

이 옵션이 필요하다고 생각되는 경우는, 전화 번호가 테이블의 프라이머리 키인 것을 확인해 주세요.그것은 퍼포먼스에 최적입니다.

사용.IN-- 특히 MySQL 에서는 --가 합리적인 옵션입니다.MySQL 주문 상수IN는 일치하는 값을 이진법으로 검색하여 사용합니다.전체 테이블 스캔에 가장 유용합니다.이렇게 많은 목록이 있으면 전체 테이블 검색이 가장 효율적인 방법입니다.

개인적으로는 제가 제일 먼저IN목록입니다.IN1,000개의 요소가 있는 리스트는 3개의 요소가 있는 리스트와 같은 코드 복잡도입니다.이것이 요구에 맞지 않는 경우는, 임시 테이블을 사용해 퍼포먼스를 시험해 보겠습니다.훨씬 더 잘 작동한다면, 그 방법을 택하세요.

저는 첫 번째 방법이 더 읽기 쉽고 유지보수에 더 좋다고 생각합니다.

어느 날 임시 테이블에서 영구 테이블로 전환하는 것이 더 쉽습니다.

퍼포먼스에 대해서는 이미 토픽이 있습니다.

WHERE 절에서 하면 플래너는 보다 효율적인 루트를 선택하고 있을 것으로 생각됩니다.인덱스 기반 데이터 세트 또는 미리 필터링된 데이터 세트).

2개의 열에 인덱스를 추가하면 조인 속도를 높일 수 있습니다(포함된 열과 여러 열 인덱스가 Postgres에서 지원되는지는 아직 확실하지 않습니다).

언급URL : https://stackoverflow.com/questions/47031678/mysql-temporary-table-vs-where-in-clause

반응형