Подтвердить что ты не робот

Какой самый эффективный способ выбрать последние n строк в таблице без изменения структуры таблицы?

Какой самый эффективный способ выбрать последнее число строк в таблице с помощью mySQL? Таблица содержит миллионы строк, и в любой момент времени я не знаю, насколько велика таблица (она постоянно растет). В таблице есть столбец, который автоматически увеличивается и используется как уникальный идентификатор для каждой строки.

4b9b3361

Ответ 1

SELECT * FROM table_name ORDER BY auto_incremented_id DESC LIMIT n

Ответ 2

На самом деле правильный способ получить последние n строк в порядке - использовать подзапрос:

(SELECT id, title, description FROM my_table ORDER BY id DESC LIMIT 5) 
ORDER BY tbl.id ASC

Как только я знаю, это вернет их в правильном порядке. Принятый ответ на самом деле является решением для "Выбрать первые 5 строк из набора, упорядоченного по убыванию", но это, скорее всего, то, что вам нужно.

Ответ 3

Возможно, закажите его по уникальному id по убыванию:

SELECT * FROM table ORDER BY id DESC LIMIT n

Единственная проблема заключается в том, что вы можете выбрать в другом порядке, и эта проблема заставила меня выбрать последние строки, подсчитав количество строк, а затем выбрав их с помощью LIMIT, но, очевидно, что, вероятно, не хорошее решение в вашем случае.

Ответ 4

(Похоже на ответ "marco",)
my fav - это max() - функция MySQL тоже, в простой однострочном, но есть и другие способы:

SELECT whatever FROM mytable WHERE id > (SELECT max(id)-10 FROM mytable);

... и вы получите "последний id минус 10", как правило, последние 10 записей этой таблицы.

Это короткий путь, чтобы избежать ошибки 1111 ( "Недопустимое использование групповой функции" ) не только, если есть строка auto_increment-row (здесь id).
Функция max() может использоваться многими способами.

Ответ 5

Используйте ORDER BY для сортировки по столбцу идентификатора в порядке DESC и используйте LIMIT, чтобы указать, сколько результатов вы хотите.

Ответ 6

Вероятно, вы также захотите добавить нисходящий индекс (или то, что они вызывают в mysql), чтобы сделать выбор быстрым, если он что-то будет делать часто.

Ответ 7

Это намного быстрее, когда у вас большие таблицы, потому что вам не нужно заказывать всю таблицу. Вы просто используете id как уникальный идентификатор строки. Это также более эффективно, когда у вас есть большой объем данных в некоторых колонках (-ах) как изображения, например (blobs). Порядок в этом случае может быть очень затратным временем и потреблением данных.

select * 
from TableName 
where id > ((select max(id) from TableName)-(NumberOfRowsYouWant+1)) 
order by id desc|asc

Единственная проблема заключается в том, что вы удаляете строки в нужном вам интервале. В этом случае вы не получите настоящего "NumberOfRowsYouWant".

Вы также можете легко использовать это, чтобы выбрать n строк для каждой страницы, просто умножив (NumberOfRowsYouWant + 1) на номер страницы, когда вам нужно отобразить таблицу назад на нескольких веб-страницах.

Ответ 8

Здесь вы можете изменить имя таблицы и имя столбца в соответствии с вашим требованием. если вы хотите показать последние 10 строк, тогда поместите n = 10 или n = 20 или n = 30... и т.д. согласно вашему требованию.

выберите * из (выберите * у сотрудника Заказ по emp_id desc limit n) a Order by emp_id asc;