Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Максимальное значение / 10 сообщений из 10, страница 1 из 1
20.03.2013, 19:45
    #38192078
OlegSkal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
Добрый день!

Новичек в SQL.
Помогите плиз с банальным вопросом.
Суть вопроса: нужно получить из списка значений максимальное значение, меньшее или равное чем введенное наиболее быстрым способом.

Например:
есть числа 1,2,4,2,6,4,5,8,9
я ввожу 7 - прога выводит 6
я ввожу 4 - прога выводит 4

Конкретнее:
Оговорюсь сразу запросы рабочие и проверенные.
Есть такая таблица A (например):
CREATE TABLE IF NOT EXISTS [A] ([Date] INTEGER PRIMARY KEY, [Result] TEXT);
Вот запрос который реально работает (123 - число для примера):
SELECT [Result] FROM [A] WHERE [Date] <= 123 ORDER BY [Date] DESC LIMIT 1;

можно ли ускорить получение заветного числа?
Спасибо наперед :)
...
Рейтинг: 0 / 0
20.03.2013, 19:50
    #38192088
OlegSkal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
OlegSkal,

Чуток неправильно привел пример.
значения [Date] постоянно растут
...
Рейтинг: 0 / 0
20.03.2013, 20:17
    #38192149
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
Прочитать вот этот пост: 13601944
В букваре прочитать шестую главу.
Забыть про слово LIMIT и никогда его не использовать.
...
Рейтинг: 0 / 0
20.03.2013, 20:52
    #38192190
OlegSkal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
Спасибо! (((((((((
Накидал такое, но скорость ни на каплю не увеличилась
Дело в том что выполняется не один а очень много однотипных запросов
SELECT [Result],MAX([Date]) FROM [A] WHERE [Date] <= 123;
...
Рейтинг: 0 / 0
20.03.2013, 23:12
    #38192308
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
А тебя не смутило что вторая колонка результата содержит одно и тоже во всех строках?
Вот этот запрос:
SELECT [Result],MAX([Date]) FROM [A] WHERE [Date] <= 123;
Означает: Дай мне все Result у которых Date меньше или равна 123, для каждой строки результата покажи максимальную дату по всей таблице.

Прочитай шестую главу еще раз.
И не надо брать имена колонок в квадратные скобки, SQLite это не Access.
...
Рейтинг: 0 / 0
20.03.2013, 23:20
    #38192316
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
Ой, прошу прощения. Кажется я соврал.
У тебя всего одна строка должна быть в результате.

Запрос
SELECT MAX([Date]) FROM [A] WHERE [Date] <= 123;
Правильный. Выдаст максимальное [Date] которое меньше или равно 123.
При работе этот запрос прошерстит всю таблицу. Если хочешь его ускорить то надо создавать индекс на поле [Date].
...
Рейтинг: 0 / 0
21.03.2013, 19:26
    #38193864
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
White OwlЕсли хочешь его ускорить то надо создавать индекс на поле [Date].у него и так PRIMARY KEY

возможно, запрос все же быстро выполняется, но ТС:
- мудрит с действительно многократным его вызовом, хотя можно выудить все данные одним бОльшим запросом
- данных в таблице мегадофига
- кеш невелик
...
Рейтинг: 0 / 0
21.03.2013, 19:30
    #38193870
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
еще вариант - попробовать сделать индекс с обратной сортировкой
Код: sql
1.
CREATE TABLE [A] ([Date] INTEGER PRIMARY KEY DESC, [Result] TEXT);
...
Рейтинг: 0 / 0
26.03.2013, 15:48
    #38198861
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
White Owl,

Почему никогда нельзя использовать LIMIT?
...
Рейтинг: 0 / 0
26.03.2013, 18:30
    #38199227
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальное значение
PPAWhite Owl,

Почему никогда нельзя использовать LIMIT?Накладные расходы велики.
limit имеет смысл только с сортировкой, а сортировка требует времени и памяти. Простой field<constant намного быстрее работает.
А задавать limit без order by это получать случайный набор строк. Это имеет смысл только на этапе разработки, когда надо просто посмотреть на типы данных которые могут быть получены рассматриваемым запросом.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Максимальное значение / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]