Самый эффективный способ поиска - добавить столбец наподобие is_latest, который необходимо заполнить заранее, а затем select * from table where file_id=1 and is_latest=true
, если вы хотите получить последнюю версию файла 1. Очевидно, это приведет к обновлению этой таблицы. более сложный, однако.
Другим способом сделать это было бы сохранение последних версий файлов в одной таблице и исторических версий в другой таблице. Если вы преимущественно хотите выбрать все файлы, которые являются самой последней версией, select * from table where is_latest=true
может составить полное сканирование таблицы, даже если is_latest проиндексирован. Если все последние строки были в одной таблице, база данных может считывать их все в последовательном вводе-выводе, и им не нужно: 1) выполнять большой поиск в таблице, чтобы найти только те записи, которые ей нужны, или 2) сканировать всю таблицу, отбрасывая большие количество данных по пути для старых записей.
Если вы не хотите изменять существующий дизайн таблицы, то, что вы хотите сделать, это выбрать выбор группового максимума, см. эту статью , чтобы узнать о нескольких различных способах сделать это в mysql.