programing

mysql 마지막 행에서 선택

copysource 2022. 10. 21. 22:07
반응형

mysql 마지막 행에서 선택

인덱스(자동 증분) 및 정수 값이 있는 테이블이 있습니다.그 탁자는 길이가 수백만 줄이다.

테이블의 마지막 n 행에 특정 번호가 가장 효율적으로 표시되는 경우 어떻게 검색하면 됩니까?

@chaos의 답변부터 시작하지만 몇 가지 수정을 가합니다.

  • 항상 사용해야 합니다.ORDER BY사용한다면LIMITRDBMS 테이블에는 암묵적인 순서가 보장되지 않습니다.보통 프라이머리 키의 순서로 행이 표시되는 경우가 있습니다만, 이것은 신뢰할 수 없습니다.또, 휴대할 수도 없습니다.

  • 내림차순으로 주문하면 테이블의 행 수를 미리 알 필요가 없습니다.

  • 파생된 테이블에 상관 이름(테이블 별칭)을 지정해야 합니다.

내 버전의 쿼리는 다음과 같습니다.

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

반응형