쿼리에서 MySQL은 ORDER BY 및 LIMIT을 어떻게 처리합니까?
다음과 같은 질문이 있습니다.
SELECT article FROM table1 ORDER BY publish_date LIMIT 20
ORDER BY 구조모든 레코드를 주문하고, 첫 번째 20개를 받을 것인가, 아니면 20개의 레코드를 받아서 다음 순서로 주문할 것인가?publish_date
필드?
마지막 기사라면 최신 기사 20개를 받을 수 있는 건 아닙니다.
먼저 주문하고, 먼저 20개를 받을 거예요.데이터베이스에서는, 다음의 임의의 데이터도 처리됩니다.WHERE
앞에 절을 붙이다ORDER BY
.
LIMIT 구를 사용하면 SELECT 문에 의해 반환되는 행 수를 제한할 수 있습니다.LIMIT는 하나 또는 두 개의 숫자 인수를 사용합니다. 둘 다 음수가 아닌 정수 상수여야 합니다(준비된 문을 사용하는 경우 제외).
두 개의 인수를 사용하는 경우 첫 번째 인수는 반환할 첫 번째 행의 오프셋을 지정하고 두 번째 인수는 반환할 최대 행 수를 지정합니다.첫 번째 행의 오프셋은 0(1이 아님)입니다.
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
특정 오프셋에서 결과 세트 끝까지 모든 행을 검색하려면 두 번째 파라미터에 큰 숫자를 사용합니다.이 문은 96번째 행에서 마지막 행까지의 모든 행을 가져옵니다.
SELECT * FROM tbl LIMIT 95,18446744073709551615;
인수 1개를 사용하여 결과 세트의 선두에서 반환되는 행의 수를 지정합니다.
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
즉, LIMIT row_count는 LIMIT 0, row_count와 동일합니다.
자세한 것은, http://dev.mysql.com/doc/refman/5.0/en/select.html 를 참조해 주세요.
@James가 말한 것처럼 모든 레코드를 주문하고 첫 번째 20 행을 가져옵니다.
그 때문에, 20편의 초판 기사를 입수할 수 있습니다.새로운 기사는 표시되지 않습니다.
고객님의 경우 다음을 추가할 것을 권장합니다.desc
로.order by publish_date
최신 기사를 원하신다면, 최신 기사가 첫 번째가 될 것입니다.
결과를 오름차순으로 유지해야 할 경우 최신 기사 10개만 원하는 경우 mysql에게 결과를 두 번 정렬하도록 요청할 수 있습니다.
다음 쿼리는 결과를 내림차순으로 정렬하고 결과를 10(괄호 안의 쿼리)으로 제한합니다.그래도 내림차순으로 정렬이 되기 때문에 mysql에게 다시 정렬을 의뢰합니다.이제 마지막 줄에 최신 결과가 있습니다.
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
모든 열이 필요한 경우 다음과 같이 수행됩니다.
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
이 기술을 사용하여 수동으로 쿼리를 작성하여 데이터베이스를 검사합니다.실가동 환경에서 사용한 적은 없습니다만, 벤치에 표시하면, 여분의 정렬은 퍼포먼스에 영향을 주지 않습니다.
주문 마지막에 [asc]또는 [desc]를 추가하여 최신 또는 최신 레코드를 취득할 수 있습니다.
예를 들어, 가장 먼저 최신 레코드를 제공합니다.
ORDER BY stamp DESC
append append append다를 .LIMIT
에 절ORDER BY
인덱스가 , 이 에서는, 「」, 「」에 ,publish_date
필드를 선택하면 MySQL이 요청된 20개의 레코드를 얻기 위해 전체 인덱스를 스캔할 필요가 없습니다. 20개의 레코드는 인덱스의 시작 부분에서 발견됩니다.그러나 적절한 인덱스가 없는 경우 표의 전체 스캔이 필요합니다.
이에 대한 2009© MySQL 퍼포먼스 블로그 기사가 있습니다.
할 수 .SELECT article FROM table1 ORDER BY publish_date LIMIT 0,10
레코드의 수 "0"은 "10"의 제한입니다.
LIMIT은 보통 마지막 작업으로 적용되므로 결과가 먼저 정렬되고 20으로 제한됩니다.실제로 정렬된 결과가 처음 20개 발견되면 정렬이 중지됩니다.
다음과 같이 단순화할 수 있습니다.
SELECT article FROM table1 ORDER BY publish_date DESC FETCH FIRST 20 ROWS ONLY;
, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 이렇게 도 있어요.ORDER BY
하다, 쉼표로 구분하다.ORDER BY publish_date, tab2, tab3 DESC
syslog...
언급URL : https://stackoverflow.com/questions/4708708/how-does-mysql-process-order-by-and-limit-in-a-query
'itsource' 카테고리의 다른 글
어떻게 자바에 문자를 보내기. (0) | 2022.09.21 |
---|---|
Android를 통해 Google Maps Directions 실행 (0) | 2022.09.19 |
app.js:81010 [Vue warn] :마운트된 후크 오류: "ReferenceError: $store가 정의되지 않았습니다." (0) | 2022.09.19 |
단순히 함수 반환값을 캐시할 수 있는 데코레이터가 있나요? (0) | 2022.09.19 |
MySQL 서비스 창 중지 (0) | 2022.09.19 |