2011-02-11 2 views
31

MySQL이 쿼리를 처리 할 때 가장 먼저 오는 것은 어느 것입니까?MySQL LIMIT는 ORDER BY 이전 또는 이후에 적용됩니까?

예 :

SELECT pageRegions 
FROM pageRegions WHERE(pageID=?) AND(published=true) AND (publishedOn<=?) 
ORDER BY publishedON DESC 
LIMIT 1'; 

그 제한에 의해 주문 후 적용하면 레코드가 수정 날짜와 일치하지 않는 경우에도 마지막으로 게시 pageRegion를 반환 할 것인가?

답변

28

예, ORDER BY 이후입니다. 귀하의 질의에 대해 가장 높은 publishedOn을 가진 레코드를 얻으려면, DESC을 주문하고 결과 세트에서 가장 큰 값을 첫 번째로 선택하십시오.

20

limit은 항상 결과 수집의 마지막에 적용되므로 order by 이후에 적용됩니다.

을 감안할 때 모든 조항

, 처리 순서는
  • LIMIT
  • 에 의해

  • 순서를 선택
  • FROM

    • 그래서 당신이 얻을 것이다 것 가장 가까운 레코드 < = published 모든 일치 WHERE 절의 조건

  • 3

    결과를 제한하기 전에 MySQL 주문이 적용되는 경우를 지적하고 싶습니다. 그러나 이것은 다른 DB에 대해서는 사실이 아닙니다.

    예를 들어 오라클은 결과를 제한하고 결과에 대한 순서를 적용합니다. 그것은 당신이 그것을 성능 관점에서 생각할 때 의미가 있습니다. MySQL에서는 실제로 전체 DB (> 1000 레코드)를 주문합니다.

    +0

    감사합니다, @cristian! 퍼포먼스 측면에서 궁금했습니다. – Alastair

    +0

    이 답변은 오래 전이었습니다. 나는 단지 MySQL이 다른 Oracle DB (2015_ _ _)처럼 Oracle에 속하고 [이 MySQL 페이지] (https://dev.mysql.com/doc/refman/5.5/en/limit)에 따르면, -optimization.html)'ORDER BY'를 추가하든하지 않든'LIMIT'을 사용하자마자 전체 테이블 스캔이 완료되지 않습니다. – 1111161171159459134