Какой самый эффективный способ выбрать последние n строк в таблице без изменения структуры таблицы? - PullRequest
18 голосов
/ 23 сентября 2008

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

Ответы [ 8 ]

46 голосов
/ 23 сентября 2008
SELECT * FROM table_name ORDER BY auto_incremented_id DESC LIMIT n
16 голосов
/ 18 июня 2012

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

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

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

4 голосов
/ 19 февраля 2016

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

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

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

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

4 голосов
/ 23 сентября 2008

Возможно заказать по уникальному идентификатору по убыванию:

SELECT * FROM table ORDER BY id DESC LIMIT n

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

2 голосов
/ 23 сентября 2008

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

2 голосов
/ 23 сентября 2008

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

1 голос
/ 29 ноября 2014

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

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

Единственная проблема, если вы удаляете строки в нужном интервале. В этом случае вы не получите реальный «NumberOfRowsYouWant».

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

0 голосов
/ 31 января 2017

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

выберите * из (выберите * от сотрудника Упорядочить по emp_id предел по номеру n) Заказ по emp_id asc;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...