n 개의 마지막 행에서 mysql 선택
인덱스 (자동 증가)와 정수 값이있는 테이블이 있습니다. 테이블의 길이는 수백만 행입니다.
테이블의 마지막 n 개 행에 특정 숫자가 가장 효율적으로 나타나는지 어떻게 검색 할 수 있습니까?
@chaos가 제공 한 답변 에서 시작 하지만 몇 가지 수정 사항이 있습니다.
을 사용하는
ORDER BY
경우 항상 사용해야 합니다LIMIT
. RDBMS 테이블에 대해 보장되는 암시 적 순서는 없습니다. 당신은 할 수 있습니다 일반적으로 기본 키의 순서로 행을 얻을 수 있지만, 당신은이에 의존 할 수 없으며 휴대용입니다.내림차순으로 정렬하는 경우 테이블의 행 수를 미리 알 필요가 없습니다.
파생 테이블에 상관 이름 (일명 테이블 별칭)을 제공해야 합니다.
내 버전의 쿼리는 다음과 같습니다.
SELECT `id`
FROM (
SELECT `id`, `val`
FROM `big_table`
ORDER BY `id` DESC
LIMIT $n
) AS t
WHERE t.`val` = $certain_number;
매우 늦은 답변 일 수 있지만 이것은 훌륭하고 간단합니다.
select * from table_name order by id desc limit 5
이 쿼리는 테이블에 삽입 한 마지막 5 개 값 (마지막 5 개 행) 집합을 반환합니다.
mysql에서 마지막 5 개 행 검색
이 쿼리는 완벽하게 작동합니다.
SELECT * FROM (SELECT * FROM recharge ORDER BY sno DESC LIMIT 5)sub ORDER BY sno ASC
또는
select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc
페이지 매김과 마찬가지로 SORT 및 LIMIT를 활용하십시오. i 번째 행 블록을 원하면 OFFSET을 사용하십시오.
SELECT val FROM big_table
where val = someval
ORDER BY id DESC
LIMIT n;
Nir에 대한 응답 : 정렬 작업이 반드시 불이익을받는 것은 아니며 쿼리 플래너가 수행하는 작업에 따라 다릅니다. 이 사용 사례는 페이지 매김 성능에 중요하므로 몇 가지 최적화가 있습니다 (위 링크 참조). 이것은 postgres에서도 마찬가지입니다. "ORDER BY ... LIMIT는 정렬없이 수행 될 수 있습니다 . " E.7.1. 마지막 글 머리 기호
explain extended select id from items where val = 48 order by id desc limit 10;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | items | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
자동 증가이기 때문에 여기에 내 의견이 있습니다.
Select * from tbl
where certainconditionshere
and autoincfield >= (select max(autoincfield) from tbl) - $n
이것이 조금 오래되었을 수 있다는 것을 알고 있지만 PDO::lastInsertId
. 나는 그것이 당신이 원하는 것을 수행한다고 생각하지만 PDO를 사용하려면 응용 프로그램을 다시 작성해야 할 것입니다 (공격에 대해 훨씬 안전합니다)
참고 URL : https://stackoverflow.com/questions/573646/mysql-select-from-n-last-rows
'developer tip' 카테고리의 다른 글
Capistrano에서 Git 하위 디렉터리 배포 (0) | 2020.11.17 |
---|---|
드롭 다운 목록 제어 (0) | 2020.11.17 |
Clojure XML 구문 분석 (0) | 2020.11.17 |
Thymeleaf : Concatenation-식으로 구문 분석 할 수 없습니다. (0) | 2020.11.16 |
OPTIONS Http 메서드에 대한 Spring 보안 비활성화 (0) | 2020.11.16 |