Итак, я знаю, что в реляционных базах нет такой вещи, как «последняя строка», но я не мог найти лучшего слова, чтобы объяснить, что я хочу делать. У меня есть таблица, которая выглядит следующим образом: id
- это поле AUTO_INCREMENT
, а time
- текущая временная метка Unix. Обратите внимание, что я могу иметь один и тот же штамп времени для разных строк.Поиск таблицы mysql, начиная с последней строки
╔════╦════════════╦════════════╦═════════════╦════════════╗
║ id ║ field_1 ║ field_2 ║ field_n ║ time ║
╠════╬════════════╬════════════╬═════════════╬════════════╣
║ 1 ║ data_field ║ data_field ║ data_field ║ 1369748934 ║
║ 2 ║ data_field ║ data_field ║ data_field ║ 1369748935 ║
║ 3 ║ data_field ║ data_field ║ data_field ║ 1369748936 ║
║ 4 ║ data_field ║ data_field ║ data_field ║ 1369748936 ║
║ 5 ║ data_field ║ data_field ║ data_field ║ 1369748938 ║
║ 6 ║ data_field ║ data_field ║ data_field ║ 1369748939 ║
╚════╩════════════╩════════════╩═════════════╩════════════╝
То, что я хочу сделать, это выбрать, что начинает поиск с самого высоким time
поля и, так как я знаю, что это сортируется от самого низкого до самого высокого, я хочу, чтобы остановить поиск, когда первый ряд не Маха моего положения WHERE
потому что все остальные строки тоже не совпадают. Я думаю, что MySQL выполняет поиск по всем строкам, но так как я знаю свою структуру данных, и я знаю местоположение данных, которые я хочу, мне не нужно искать по всей таблице. Кроме того, если я использую ORDER BY
, я считаю, что все содержимое моего предложения WHERE
будет выполнено первым, так что я буду заниматься в основном поиском всего набора строк, а затем заказать его. Одна важная вещь: я не знаю, сколько строк будет извлечено для использования предложения LIMIT
.
Это пример запроса:
SELECT fields FROM table WHERE time > timestamp
Так что я хочу, чтобы получить все результаты, начиная с указанной даты до сих пор.
Большое спасибо за помощь.
Вы пытались сделать двойной первичный ключ, состоящий из идентификатора и метки времени? Вы * хотите * делать WHERE перед ORDER BY, поскольку WHERE является операцией O (n) (быстрее с индексами, см. Http://stackoverflow.com/a/13362951/431415). – SubSevn
Я думаю, что вы имеете в виду временную метку и идентификатор (в этом порядке), в противном случае каждая строка все равно нуждается в поиске. – mcNux
@Vinicius Была ли эта проблема решена? –