쿼리 정렬의 mysql

WBOY
풀어 주다: 2023-05-11 22:40:36
원래의
2205명이 탐색했습니다.

MySQL에서는 IN 쿼리를 사용하여 조건을 충족하는 데이터 집합을 필터링할 수 있습니다. IN 쿼리를 사용하면 여러 쿼리 조건을 쉽게 결합하고 쿼리 효율성을 높일 수 있습니다. 그러나 IN 쿼리는 대량의 데이터를 처리할 때 성능 병목 현상이 발생할 수도 있습니다. 따라서 IN 쿼리를 수행할 때 알아야 할 몇 가지 주요 측면이 있습니다.

1. IN 쿼리의 기본 사용법

IN 쿼리의 구문은 다음과 같습니다.

SELECT 컬럼1, 컬럼2, … 쿼리 필드 이름, value1, value2 등은 쿼리 조건이며 상수, 매개변수 또는 하위 쿼리를 조건으로 사용할 수 있습니다.

간단한 예로 고객 ID, 이름, 도시 등의 필드가 포함된 고객 테이블이 있다고 가정해 보겠습니다. 도시가 "Beijing" 또는 "Shanghai"인 고객 정보를 쿼리해야 합니다. 다음 SQL 문을 사용할 수 있습니다.

SELECT * FROM Customers WHERE city IN ('Beijing', 'Shanghai');

이 쿼리 문은 다음을 사용합니다. IN 쿼리하려면 도시 조건을 "Beijing" 또는 "Shanghai"로 설정하세요. 쿼리 결과는 이 두 가지 조건을 충족하는 고객 정보를 반환합니다.

2. IN 쿼리의 성능 문제 및 해결 방법

IN 쿼리가 더 편리하지만 대용량 데이터를 처리할 때 성능 문제가 발생할 수도 있습니다. 일반적인 문제는 쿼리 문의 응답 시간이 너무 길어서 성능 저하가 발생한다는 것입니다. 또 다른 유형의 문제는 IN 쿼리 문의 값 목록이 너무 길어서 발생하는 메모리 오버플로 또는 기타 메모리 관련 문제입니다.

다음은 몇 가지 일반적인 해결 방법입니다.

하위 쿼리 사용

    IN 쿼리 대신 하위 쿼리를 사용하는 것이 일반적인 해결 방법입니다. 하위 쿼리는 IN 쿼리를 독립적인 쿼리로 분해하여 쿼리의 시간 복잡성을 줄일 수 있습니다. 예:
  1. SELECT * FROM 고객 WHERE city = 'Beijing' OR city = 'Shanghai';

이 쿼리 문은 OR 연산자를 사용하여 도시 조건을 "Beijing" 또는 "Shanghai"로 설정합니다. 쿼리 결과는 이 두 가지 조건을 충족하는 고객 정보를 반환합니다.

JOIN 쿼리 사용

    JOIN 쿼리를 사용하면 IN 쿼리를 대체할 수도 있으며 여러 테이블 간의 연결을 설정하고 연결 조건을 충족하는 쿼리 결과를 반환할 수도 있습니다. 예:
  1. SELECT * FROM 고객 c JOIN 주문 o ON c.customer_id = o.customer_id WHERE c.city = 'Beijing' OR c.city = 'Shanghai';

이 쿼리 문은 JOIN 쿼리를 사용하며 A에서는 두 테이블 사이에 관계가 설정됩니다. 쿼리 결과는 해당 조건에 맞는 고객 정보와 주문 정보를 반환합니다.

임시 테이블 사용

    쿼리 목록에 값이 너무 많아서 서브 쿼리나 JOIN 쿼리를 사용하여 IN 쿼리를 대체할 수 없다면 임시 테이블 사용을 고려해 볼 수 있습니다. 임시 테이블은 필요할 때 생성하고 쿼리가 완료된 후 자동으로 삭제될 수 있는 자체 삭제 가능한 테이블입니다. 쿼리 목록의 값은 임시 테이블에 저장한 후 JOIN 쿼리를 사용하여 원본 테이블과 연결할 수 있습니다. 예:
  1. CREATE 임시 테이블 tmp_city (city varchar(10));
INSERT INTO tmp_city VALUES ('Beijing'), ('Shanghai');

SELECT * FROM 고객 c JOIN tmp_city t ON c.city = t. city ​​;

이 쿼리 문은 쿼리 목록에 도시 이름을 저장하기 위한 임시 테이블을 생성합니다. 그런 다음 JOIN 쿼리를 사용하여 이 임시 테이블을 고객 테이블과 연결하여 연결 조건을 충족하는 고객 정보를 반환합니다.

3. ORDER BY 정렬을 사용하세요

IN 쿼리를 사용할 때 반환된 결과의 순서를 유지하는 방법에도 주의해야 합니다. 쿼리 조건에 고정된 값 목록이 지정되면 반환되는 결과도 이 목록의 순서대로 정렬되기를 바랍니다. 예:

SELECT * FROM 고객 WHERE city IN ('Beijing', 'Shanghai') ORDER BY city DESC

이 쿼리 문은 결과를 도시 이름별로 내림차순으로 정렬하며 반환된 첫 번째 항목은 "Shanghai"입니다. '베이징' 고객 정보가 아닌 '고객 정보'를 제공합니다.

반환된 결과를 고정된 값 목록 순서로 정렬하려면 CASE 문을 사용하면 됩니다. 예:

SELECT *

FROM 고객

WHERE city IN ('Beijing', 'Shanghai')

ORDER BY CASE city

        WHEN '北京' THEN 1
        WHEN '上海' THEN 2
     END;
로그인 후 복사

이 쿼리 문은 CASE 문을 사용하여 "Beijing"을 첫 번째로 순위를 매기고 "Shanghai"를 두 번째로 순위를 매깁니다. . 쿼리 결과는 이 조건을 충족하는 고객 정보를 도시 이름별로 정렬하여 반환합니다.

IN 쿼리를 사용할 때는 위의 모든 요소를 ​​고려해야 합니다.

4. 요약

IN 쿼리는 MySQL에서 일반적으로 사용되는 쿼리 방법으로, 여러 쿼리 조건을 쉽게 결합하여 쿼리 효율성을 높일 수 있습니다. 그러나 IN 쿼리는 대량의 데이터를 처리할 때 성능 병목 현상이 발생할 수도 있습니다. 쿼리 성능을 향상시키기 위해 하위 쿼리, JOIN 쿼리 또는 임시 테이블과 같은 기술을 사용할 수 있습니다. 동시에 IN 쿼리를 사용할 때는 결과 순서에도 주의해야 합니다. ORDER BY 및 CASE 문을 사용하면 고정된 순서 반환 결과를 얻을 수 있습니다.

위 내용은 쿼리 정렬의 mysql의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!