복붙노트

[SQL] ORDER BY와 LIMIT 대 MIN / MAX

SQL

ORDER BY와 LIMIT 대 MIN / MAX

당신이 더 나은 하나를 고려할 것입니다 방법 다음 쿼리 중? 당신의 이유 (코드 효율성, 더 나은 유지 보수성, 적은 WTFery)는 무엇입니까 ...

SELECT MIN(`field`)
FROM `tbl`;

SELECT `field`
FROM `tbl`
ORDER BY `field`
LIMIT 1;

해결법

  1. ==============================

    1.당신이 MIN ()를 사용하여, 색인화되지 않은 필드보고있는 최악의 경우, 테이블에 하나의 전체 과정을 필요로한다. SORT 및 LIMIT를 사용하면 filesort가 필요합니다. 큰 테이블에 대해 실행하면 가능성이 percieved 성능에 ​​큰 차이가있을 것입니다. SORT 및 LIMIT 내 dev에 서버에 106,000 행 테이블에 대해 .84s했다 동안 의미없는 데이터 포인트로, MIN () .36s했다.

    당신이 MIN ()를 사용하여, 색인화되지 않은 필드보고있는 최악의 경우, 테이블에 하나의 전체 과정을 필요로한다. SORT 및 LIMIT를 사용하면 filesort가 필요합니다. 큰 테이블에 대해 실행하면 가능성이 percieved 성능에 ​​큰 차이가있을 것입니다. SORT 및 LIMIT 내 dev에 서버에 106,000 행 테이블에 대해 .84s했다 동안 의미없는 데이터 포인트로, MIN () .36s했다.

    그러나, 당신은 인덱스 열을 찾고 있다면, 차이는 더 열심히주의 사항입니다 (의미없는 데이터 포인트 두 경우 모두 0.00s)입니다. )하지만, 그것은 MIN (처럼 보이는 설명의 출력을 보면 단순히 인덱스 ( '선택 테이블이 멀리 최적화'와 'NULL'행) 정렬 반면 및 LIMIT 여전히 할 필요를 필요에서 가장 작은 값을 뽑을 수있다 인덱스의 순서 탐색 (106,000 행). 실제 성능에 미치는 영향은 아마도 무시할 수있다.

    그것은 MIN 모양 ()이 길을 가야하는 것입니다 - 더 빨리 최악의 경우의, 최선의 경우 구별, 표준 SQL과 가장 명확하게 당신이 얻을하려는 값을 표현한다. 이 바람직 할 것이다 SORT와 LIMIT를 사용하여 MSON가 언급 한대로 임의의 열에서 위쪽 또는 아래쪽 N 값을 찾아 일반적인 작업을 작성하는 경우,하고는 특별한 경우 아웃 가치가 작성하지 않을 것으로 보인다 유일한 경우 조작.

  2. ==============================

    2.

    SELECT MIN(`field`)
    FROM `tbl`;
    

    간단하게 호환 ANSI 때문이다. TOP는 SQL Server에 같이 제한 (1)는 MySQL을 특히입니다.

  3. ==============================

    3.MSON 숀 McSomething이 뾰족한 아웃이 때, MIN이 바람직하다.

    MSON 숀 McSomething이 뾰족한 아웃이 때, MIN이 바람직하다.

    당신이 MIN 컬럼이 아닌 다른 컬럼의 값을 얻으려면 ORDER BY + LIMIT가 유용하다 또 다른 이유입니다.

    예:

    SELECT some_other_field, field
    FROM tbl
    ORDER BY field
    LIMIT 1
    
  4. ==============================

    4.나는 대답은 당신이 무엇을하고 있는지에 달려있다 생각합니다.

    나는 대답은 당신이 무엇을하고 있는지에 달려있다 생각합니다.

    당신이 1 쿼리 오프가 있고 규정 된 목적은 간단 경우, 선택 분 (필드)이 바람직하다.

    잡아 상위 N 결과를 잡아 제 n - - 제 m 결과 등 그러나로 변경 요구의 이러한 유형을 가지고 일반적인

    나는 그것이 선택한 데이터베이스에 커밋 너무 끔찍한 아이디어 생각하지 않습니다. 변경 DBS 가볍게 만들어 개정이이 이동을 할 때 당신이 지불하는 가격입니다해서는 안된다.

    왜 또는 나중에 생각하지 않을 수 있습니다 통증, 지금은 자신을 제한?

    나는 가능한 한 ANSI를 유지하기 위해 그것의 좋은 생각,하지만 그건 단지 가이드 라인의 ...

  5. ==============================

    5.그 의도와 의미 가까이 있기 때문에 감안할 때 적절한 성능은 내가 처음 하나를 사용합니다. 성능이 문제가 있었다면, 물론 내가 빨리 하나를 사용하는 것이 다음의 (당신이 그것을 확인하기 위해 테스트해야하지만 대부분의 현대 최적화는 probalbly, 같은 쿼리 계획에 모두 최적화합니다).

    그 의도와 의미 가까이 있기 때문에 감안할 때 적절한 성능은 내가 처음 하나를 사용합니다. 성능이 문제가 있었다면, 물론 내가 빨리 하나를 사용하는 것이 다음의 (당신이 그것을 확인하기 위해 테스트해야하지만 대부분의 현대 최적화는 probalbly, 같은 쿼리 계획에 모두 최적화합니다).

  6. from https://stackoverflow.com/questions/426731/min-max-vs-order-by-and-limit by cc-by-sa and MIT license