본문 바로가기
MySql

MySQL 성능-단일 값에 대한 "IN"절과 같음 (=)

by 베이스 공부 2020. 9. 18.
반응형

이것은 매우 간단한 질문이고 대답은 "중요하지 않다"라고 가정하고 있지만 어쨌든 물어봐야합니다 ...

PHP로 작성된 일반 SQL 문이 있습니다.

$sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';

사전 유효성 검사 ( $ object_ids 가 최소 1 개의 항목과 모든 숫자 값이있는 배열)라고 가정하면 대신 다음을 수행해야합니까?

if(count($object_ids) == 1) {
    $sql = 'SELECT * FROM `users` WHERE `id` = ' . array_shift($object_ids);
} else {
    $sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';
}

아니면 count ($ object_ids) 를 확인하는 오버 헤드가 실제 SQL 문에 저장 될 가치가 없습니까 (만약 있다면)?

 

해결 방법

 

둘 다 큰 범위에서 중요하지 않습니다. 데이터베이스와 통신 할 때의 네트워크 지연 시간은 count ($ object_ids) 오버 헤드 또는 = IN 오버 헤드보다 훨씬 큽니다. 나는 이것을 조기 최적화의 경우라고 부를 것입니다.

실제 병목 지점이 어디에 있는지 알아 보려면 애플리케이션을 프로파일 링하고로드 테스트해야합니다.

 

참조 페이지 https://stackoverflow.com/questions/9926433

 

 

반응형

댓글