![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL- запрос [D7, FB 1.5]
Ganda © (2007-11-27 08:42:00)имеется большая таблица есть такое поле Field1 оно инедксировано и имеет тип символьный, в день к этому полю обращаются по не скольку тысяч раз! надо узнать его масксимальное значение в определенном диапозоне
я делаю так:
select max(Field1) from main where Field1 between 'A0000001' and 'A9999999'
ответа в первом обращении приходится ждать где то с полминуты если не больше!
Теперь вопрос можно ли как то подругому получить максимальное значение этого поля и в заданном диапозоне?!
Anatoly Podgoretsky (2007-11-27 17:02:00) [1]> Правильный_Вася (27.11.2007 15:21:11) [11]
По индексу будет делаться эта громадная выборка, потом будет проводиться сравнение. Если сравнение по индексу, то будет 10 000 000 сравнений от мин до макс, дешевле сделать выборку и по ней последовательно пройти, а вот тут то и пригодится DESC
И чего там спорить, тут надо план смотреть.
Виталий Панасенко(дом) (2007-11-27 15:40:00) [2]
> Правильный_Вася (27.11.07 15:21)
FireBird до 2,0 включительно не умеет быстро вычислять МАКС без индекса по убыванию.. Я не в давался в дебри, то ли на IBASE.RU, то ли на FireBirdSQL.ORG описано, с чем это связано(или глянуть в каталог DOC устновленного сервера, не помню точно.. Но вроде русскоязычный текст был. И что есть несколько вариантов).. Вроде бы обещали решить проблему в 3,х
Правильный_Вася (2007-11-27 15:21:00) [3]
> С чего ты взял, что в плане какое то дерево, там обычный index scan
ну, так индекс и есть древовидная структура, так и именуемая b-tree index
больше - направо, меньше - налево, затем на следующем уровне иерархии то же самое
Anatoly Podgoretsky (2007-11-27 14:48:00) [4]> Правильный_Вася (27.11.2007 12:51:09) [9]
С чего ты взял, что в плане какое то дерево, там обычный index scan
Правильный_Вася (2007-11-27 12:51:00) [5]
> либо взять одно значение сразу
и как ты возьмешь одно значение сразу, если ты не знаешь, какое оно?
все равно проход по дереву нужен, особенно если есть ограничивающее условие
Кщд (2007-11-27 12:31:00) [6]Правильный_Вася (27.11.07 12:04) [7]
либо взять одно значение сразу, либо использовать range scan
разница заметна
Правильный_Вася (2007-11-27 12:04:00) [7]не понял
двоичное дерево все равно с середины начинается
и в любом случае нет полного просмотра
Anatoly Podgoretsky (2007-11-27 11:36:00) [8]
> а в чем фокус?
Другой план выполнения, почти сразу дает результат, не надо просматривать предыдущие 10 миллионов записей.
Кщд (2007-11-27 10:43:00) [9]>а в чем фокус?
оптимизация для max
Правильный_Вася (2007-11-27 10:40:00) [10]
> Попробуй построить DESC индекс по этому полю.
а в чем фокус?
Sergey13 (2007-11-27 08:56:00) [11]> [0] Ganda © (27.11.07 08:42)
Индекса по функции в полторашке вроде нет, значит возможно следует попробовать создать числовой аналог поля, заполняемый тригерами, и искать по нему.
ganda (2007-11-27 08:55:00) [12]
> Виталий Панасенко(дом) (27.11.07 08:45) [1]
Спасибо помогло ))
Виталий Панасенко(дом) (2007-11-27 08:45:00) [13]Попробуй построить DESC индекс по этому полю.