최소/최대와 주문 기준 및 제한
다음 질문 중 어떤 방법이 더 낫다고 생각하십니까?어떤 이유(코드 효율성, 유지보수성 향상, WTFery 감소)...
SELECT MIN(`field`)
FROM `tbl`;
SELECT `field`
FROM `tbl`
ORDER BY `field`
LIMIT 1;
되지 않은 필드를 " "를 사용합니다.MIN()
1번으로 하다「」를 사용합니다.SORT
★★★★★★★★★★★★★★★★★」LIMIT
에는 파일 정렬이 필요합니다.큰 테이블과 비교해도 퍼포먼스에 큰 차이가 있을 수 있습니다.an화 as as as as as as as as as asMIN()
.걸린 반면 .36s가 .SORT
★★★★★★★★★★★★★★★★★」LIMIT
개발 서버의 106,000 행 테이블에 대해 0.84초를 기록했습니다.
그러나 색인화된 열을 보고 있는 경우에는 차이를 알아차리기 어렵습니다(두 경우 모두 의미 없는 데이터 점이 0.00s).설명의 , 「이렇게 되어 있습니다」라고 하는 것 .MIN()
값('away'및 'NULL' 추출할 수, 'Select tables optimized away'('Select tables optimized away')는 'NULL'입니다.SORT
★★★★★★★★★★★★★★★★★」LIMIT
는 인덱스를 순서대로 트래버설할 필요가 있습니다(120,000 행).실제 퍼포먼스에 미치는 영향은 무시할 수 있습니다.
★★★★★★★★★★★★★★★★★★.MIN()
이 방법은 최악의 경우 더 빠르고 최상의 경우 구별이 불가능하며 표준 SQL이며 원하는 가치를 가장 명확하게 표현합니다.「 」를 사용하는 이, 「 」의 사용했을 되는 유일한 입니다.SORT
★★★★★★★★★★★★★★★★★」LIMIT
mson이 언급한 바와 같이 임의의 컬럼에서 상위 또는 하위 N개의 값을 찾는 일반적인 연산을 작성하는 것이 바람직하며 특별한 경우 연산은 쓸 가치가 없습니다.
SELECT MIN(`field`)
FROM `tbl`;
단순히 ANSI 호환성이 있기 때문입니다.제한 1은 TOP가 SQL Server와 마찬가지로 MySql에만 적용됩니다.
mson과 Sean 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를 유지하는 것이 좋다고 생각합니다만, 그것은 가이드라인에 지나지 않습니다.
적절한 퍼포먼스가 주어진다면 첫 번째 퍼포먼스는 의미적으로 의도에 가깝기 때문에 사용합니다.
퍼포먼스가 문제라면 (대부분의 최신 옵티마이저는 양쪽을 같은 쿼리 플랜에 프로발적으로 최적화하지만 검증은 테스트해야 합니다)물론 더 빠른 것을 사용합니다.
user650654는 "MIN 열과 다른 열의 값을 얻어야 할 때" LIMIT 1을 사용한 ORDER BY가 유용하다고 합니다.이 경우 정렬이 아닌 MIN을 사용하여 두 번의 단일 패스로도 성능이 더 우수하다고 생각합니다(이것이 최적화되기를 바랍니다).
SELECT some_other_field, field
FROM tbl
WHERE field=(SELECT MIN(field) FROM tbl)
언급URL : https://stackoverflow.com/questions/426731/min-max-vs-order-by-and-limit
'programing' 카테고리의 다른 글
거대한 MySQL innoDB 테이블에서 레코드 삭제 (0) | 2023.02.02 |
---|---|
JavaScript에서 IE 버전(v9 이전)을 검출하다 (0) | 2023.02.02 |
Array List - 인덱스가 존재하는지 확인하려면 어떻게 해야 합니까? (0) | 2023.02.02 |
롬복 빌더에서 부동산을 제외하려면 어떻게 해야 합니까? (0) | 2023.02.02 |
FIND_IN_SET() vs IN() (0) | 2023.02.02 |