[sql] MIN / MAX 대 ORDER BY 및 LIMIT

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

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

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



답변

인덱싱되지 않은 필드를보고있는 최악의 경우를 사용 MIN()하려면 테이블 전체를 한 번만 통과해야합니다. 사용 SORT하고 파일 LIMIT정렬이 필요합니다. 큰 테이블에 대해 실행하면 감지 된 성능에 상당한 차이가있을 수 있습니다. 의미없는 데이터 포인트로, MIN()동안 .36s했다 SORTLIMIT내 dev에 서버에 106,000 행 테이블에 대해 .84s했다.

그러나 인덱싱 된 열을보고있는 경우 차이를 알아 채기가 더 어렵습니다 (두 경우 모두 의미없는 데이터 포인트는 0.00s). 좋아하지만, 보이는, 설명의 출력을 보면 MIN()단순히 반면 인덱스 ( ‘선택 테이블이 멀리 최적화’와 ‘NULL’행)에서 가장 작은 값을 뽑을 수 SORTLIMIT여전히 인덱스의 정렬 된 탐색을 할 필요를 필요 (106,000 행). 실제 성능에 미치는 영향은 미미할 수 있습니다.

마치 MIN()길을 가야하는 것입니다 – 더 빨리 최악의 경우의, 최선의 경우 구별, 표준 SQL과 가장 명확하게 당신이 얻을하려는 값을 표현한다. mson이 언급했듯이 SORT및 사용하는 LIMIT것이 바람직한 것으로 보이는 유일한 경우 는 임의의 열에서 상위 또는 하위 N 값을 찾는 일반 작업을 작성하고 특수한 경우 작업을 작성할 가치가 없습니다.


답변

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

ANSI와 호환되기 때문입니다. 제한 1은 TOP이 SQL Server에 해당하므로 MySql에만 해당됩니다.


답변

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

ORDER BY + LIMIT가 유용한 또 다른 이유는 MIN 열이 아닌 다른 열의 값을 가져 오려는 경우입니다.

예:

SELECT some_other_field, field
FROM tbl
ORDER BY field
LIMIT 1


답변

대답은 당신이하는 일에 달려 있다고 생각합니다.

일회성 쿼리가 있고 의도가 지정한대로 간단하다면 min (field)를 선택하는 것이 좋습니다.

그러나 이러한 유형의 요구 사항은 일반적으로 상위 n 개 결과 획득, n 번째-m 번째 결과 획득 등으로 변경됩니다.

나는 당신이 선택한 데이터베이스를 커밋하는 것이 너무 끔찍한 생각이라고 생각하지 않습니다. dbs 변경은 가볍게 만들어서는 안되며 수정해야하는 것은이 이동을 할 때 지불하는 가격입니다.

나중에 느끼거나 느끼지 못할 고통 때문에 지금 자신을 제한하는 이유는 무엇입니까?

가능한 한 ANSI를 유지하는 것이 좋다고 생각하지만 이는 단지 지침 일뿐입니다.


답변

허용 가능한 성능이 주어지면 의미 상 의도에 더 가깝기 때문에 첫 번째 것을 사용합니다.
성능이 문제라면 (대부분의 최신 옵티마이 저는 동일한 쿼리 계획에 대해 둘 다 최적화 할 것입니다. 비록이를 확인하기 위해 테스트해야하지만) 물론 더 빠른 것을 사용합니다.


답변