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개 행)을 반환합니다.
마지막 5개 행이 mysql에서 검색됩니다.
이 쿼리는 완벽하게 작동합니다.
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을 활용하십시오.행 블록을 사용하려면 OFFSET을 사용합니다.
SELECT val FROM big_table
where val = someval
ORDER BY id DESC
LIMIT n;
Nir에 대한 응답:정렬 작업은 반드시 불이익을 주는 것은 아니며 쿼리 플래너의 작업에 따라 달라집니다.이 사용 사례는 페이지 표시 성능에 매우 중요하므로 몇 가지 최적화 방법이 있습니다(위 링크 참조).이는 포스트그레스에서도 마찬가지이며 "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
'programing' 카테고리의 다른 글
ELB를 통한 mariadb galera 클러스터를 사용하는 grails 애플리케이션에서 Mysql 연결 시간 초과 (0) | 2022.10.21 |
---|---|
vuej 마운트된 라이프 사이클이 트리거되지 않음 (0) | 2022.10.21 |
Javascript는 지금까지 선행 0을 추가했습니다. (0) | 2022.10.11 |
Eclipse 포맷터가 모든 에넘을 한 줄에 배치하지 않도록 하는 방법 (0) | 2022.10.11 |
JavaScript 함수가 정의되어 있는지 확인하는 방법 (0) | 2022.10.11 |