Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 индекс по этому полю.


Наверх

Титульная страница Поиск, карта сайта Написать письмо