, Если Вы просто используете его для grep, можно использовать grep -v hede
для получения всех строк, которые не содержат Эде.
ETA, О, перечитывая вопрос, grep -v
, вероятно, что Вы подразумевали "под опциями инструментов".
Предполагая, что время
проиндексировано, вы можете получить следующую запись почти бесплатно:
SELECT * FROM table WHERE time > 1250710000 ORDER BY time LIMIT 1
И если я не ошибаюсь, то же самое должен применяться к предыдущей записи, MySQL просто прочитает индекс в обратном порядке. Используйте ОБЪЕДИНЕНИЕ двух, отсортируйте их по дате и вуаля! Результат будет выглядеть так
SELECT *
FROM
(
(SELECT *, ABS(time - 1250710000) AS time_diff FROM table WHERE time > 1250710000 ORDER BY time ASC LIMIT 1)
UNION ALL
(SELECT *, ABS(time - 1250710000) AS time_diff FROM table WHERE time < 1250710000 ORDER BY time DESC LIMIT 1)
) AS tmp
ORDER BY time_diff
LIMIT 1
В идеале вместо >
и <
вы должны использовать > =
и <=
и исключить ссылочная запись с использованием ее первичного идентификатора для учета записей с одной и той же меткой времени.
Как сказал Эван, у вас все в порядке. Я бы порекомендовал указать индекс для этого поля временной метки, чтобы MySQL мог сканировать меньший индекс, а не всю таблицу. Кроме того, я бы попробовал «упаковать», чтобы увидеть, может ли индекс ускорить работу:
SELECT *, ABS(time - 1250710000) AS time_dist FROM table
WHERE time between(1250610000,1250810000)
ORDER BY time_dist ASC LIMIT 1
Вышеуказанные ограничения для запроса составляют примерно +/- 1 день. Вам нужно будет выполнить несколько тестов, чтобы увидеть, работает ли дополнительное сканирование индекса (предложение where) быстрее, чем вычисление ABS () для всех записей в таблице.
Было бы более эффективным выбрать минимальное время, которое больше, и максимальное? время, которое меньше, чем просто абс у этих двух. Это должно избежать необходимости работать на всю таблицу.
ВЫБРАТЬ МАКС. (время) КАК предыдущий ГДЕ время <1250710000;
ВЫБРАТЬ МИН (время) КАК следующее ГДЕ время> 1250710000;
ВЫБРАТЬ МИН (АБС (предыдущее), АБС (следующее));
Мой SQL недостаточно силен, чтобы объединить их в один, и накладные расходы на три запросы могут убить любую экономию, но это возможно.