집 >데이터 베이스 >MySQL 튜토리얼 >더 나은 성능을 위해 SQL 쿼리에 'IN' 대신 'ANY'를 사용해야 합니까?
SQL 쿼리 성능 향상: ANY
과 IN
SQL 쿼리에서 ANY
대신 IN
연산자를 사용하면 성능이 최적화되는 경우가 있습니다. 이 문서에서는 변환을 수행하는 방법과 발생할 수 있는 오류를 처리하는 방법을 설명합니다.
원래 쿼리(IN
사용):
<code class="language-ruby">MyModel.where(id: ids)</code>
동등한 쿼리(ANY
사용):
<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
빈 배열 오류 처리:
ids
이 빈 배열인 경우 ANY
연산자를 사용하면 구문 오류가 발생합니다. 따라서 ANY
을 사용하기 전에 배열이 비어 있지 않은지 확인하세요.
IN
과 ANY
의 차이점:
IN
연산자는 하위 쿼리와 값 목록의 두 가지 형식으로 제공됩니다. ANY
연산자는 하위 쿼리와 배열 표현식과 유사합니다.
그러나 이 두 연산자의 두 번째 형식에는 약간의 차이가 있습니다. IN
에는 값 목록이 필요하고 ANY
에는 배열이 필요합니다. 두 번째 형식을 사용하는 경우 값 목록을 배열로 변환해야 합니다.
IN
및 ANY
중에서 선택:
IN
및 ANY
을 모두 사용하여 값을 비교할 수 있지만 ANY
가 더 유연하고 더 많은 유형의 연산자를 처리할 수 있습니다. 그러나 IN
은 여전히 유효하며 =
연산자를 사용하여 ANY
의 특수한 경우로 내부를 다시 작성할 수 있습니다.
성능면에서는 IN
과 ANY
사이에 큰 차이가 없습니다. 어느 것을 선택하느냐는 값 목록 또는 배열 중 어느 것이 더 제공하기 쉬운지에 따라 달라집니다. 처리할 ID가 이미 배열로 제공되어 편리하다면 ANY
을 사용하는 것이 더 적절할 수 있습니다.
Ruby에서 배열 전달:
Ruby에서는 ANY
연산자를 사용하여 PostgreSQL 쿼리에 배열을 전달합니다.
<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
위 내용은 더 나은 성능을 위해 SQL 쿼리에 'IN' 대신 'ANY'를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!