|
Максимальное значение
|
|||
---|---|---|---|
#18+
Добрый день! Новичек в 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; можно ли ускорить получение заветного числа? Спасибо наперед :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 19:45 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
OlegSkal, Чуток неправильно привел пример. значения [Date] постоянно растут ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 19:50 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
Прочитать вот этот пост: 13601944 В букваре прочитать шестую главу. Забыть про слово LIMIT и никогда его не использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 20:17 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
Спасибо! ((((((((( Накидал такое, но скорость ни на каплю не увеличилась Дело в том что выполняется не один а очень много однотипных запросов SELECT [Result],MAX([Date]) FROM [A] WHERE [Date] <= 123; ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 20:52 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
А тебя не смутило что вторая колонка результата содержит одно и тоже во всех строках? Вот этот запрос: SELECT [Result],MAX([Date]) FROM [A] WHERE [Date] <= 123; Означает: Дай мне все Result у которых Date меньше или равна 123, для каждой строки результата покажи максимальную дату по всей таблице. Прочитай шестую главу еще раз. И не надо брать имена колонок в квадратные скобки, SQLite это не Access. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 23:12 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
Ой, прошу прощения. Кажется я соврал. У тебя всего одна строка должна быть в результате. Запрос SELECT MAX([Date]) FROM [A] WHERE [Date] <= 123; Правильный. Выдаст максимальное [Date] которое меньше или равно 123. При работе этот запрос прошерстит всю таблицу. Если хочешь его ускорить то надо создавать индекс на поле [Date]. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 23:20 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
White OwlЕсли хочешь его ускорить то надо создавать индекс на поле [Date].у него и так PRIMARY KEY возможно, запрос все же быстро выполняется, но ТС: - мудрит с действительно многократным его вызовом, хотя можно выудить все данные одним бОльшим запросом - данных в таблице мегадофига - кеш невелик ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 19:26 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
еще вариант - попробовать сделать индекс с обратной сортировкой Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 19:30 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
White Owl, Почему никогда нельзя использовать LIMIT? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2013, 15:48 |
|
Максимальное значение
|
|||
---|---|---|---|
#18+
PPAWhite Owl, Почему никогда нельзя использовать LIMIT?Накладные расходы велики. limit имеет смысл только с сортировкой, а сортировка требует времени и памяти. Простой field<constant намного быстрее работает. А задавать limit без order by это получать случайный набор строк. Это имеет смысл только на этапе разработки, когда надо просто посмотреть на типы данных которые могут быть получены рассматриваемым запросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2013, 18:30 |
|
|
start [/forum/topic.php?fid=54&msg=38192316&tid=2008921]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 122ms |
0 / 0 |