Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.20;
Скачать: CL | DM;

Вниз

SQL- запрос   Найти похожие ветки 

 
Ganda ©   (2007-11-27 08:42) [0]

имеется большая таблица есть такое поле Field1 оно инедксировано и имеет тип символьный, в день к этому полю обращаются по не скольку тысяч раз! надо узнать его масксимальное значение в определенном диапозоне
я делаю так:
select max(Field1) from main where Field1 between "A0000001" and "A9999999"

ответа в первом обращении приходится ждать где то с полминуты если не больше!
Теперь вопрос можно ли как то подругому получить максимальное значение этого поля и в заданном диапозоне?!


 
Виталий Панасенко(дом)   (2007-11-27 08:45) [1]

Попробуй построить DESC индекс по этому полю.


 
ganda ©   (2007-11-27 08:55) [2]


> Виталий Панасенко(дом)   (27.11.07 08:45) [1]


Спасибо помогло ))


 
Sergey13 ©   (2007-11-27 08:56) [3]

> [0] Ganda ©   (27.11.07 08:42)

Индекса по функции в полторашке вроде нет, значит возможно следует попробовать создать числовой аналог поля, заполняемый тригерами, и искать по нему.


 
Правильный_Вася   (2007-11-27 10:40) [4]


> Попробуй построить DESC индекс по этому полю.

а в чем фокус?


 
Кщд ©   (2007-11-27 10:43) [5]

>а в чем фокус?
оптимизация для max


 
Anatoly Podgoretsky ©   (2007-11-27 11:36) [6]


> а в чем фокус?

Другой план выполнения, почти сразу дает результат, не надо просматривать предыдущие 10 миллионов записей.


 
Правильный_Вася   (2007-11-27 12:04) [7]

не понял
двоичное дерево все равно с середины начинается
и в любом случае нет полного просмотра


 
Кщд ©   (2007-11-27 12:31) [8]

Правильный_Вася   (27.11.07 12:04) [7]
либо взять одно значение сразу, либо использовать range scan
разница заметна


 
Правильный_Вася   (2007-11-27 12:51) [9]


> либо взять одно значение сразу

и как ты возьмешь одно значение сразу, если ты не знаешь, какое оно?
все равно проход по дереву нужен, особенно если есть ограничивающее условие


 
Anatoly Podgoretsky ©   (2007-11-27 14:48) [10]

> Правильный_Вася  (27.11.2007 12:51:09)  [9]

С чего ты взял, что в плане какое то дерево, там обычный index scan


 
Правильный_Вася   (2007-11-27 15:21) [11]


> С чего ты взял, что в плане какое то дерево, там обычный index scan

ну, так индекс и есть древовидная структура, так и именуемая b-tree index
больше - направо, меньше - налево, затем на следующем уровне иерархии то же самое


 
Виталий Панасенко(дом)   (2007-11-27 15:40) [12]


> Правильный_Вася   (27.11.07 15:21)


FireBird до 2,0 включительно не умеет быстро вычислять МАКС без индекса по убыванию.. Я не в давался в дебри, то ли на  IBASE.RU, то ли на FireBirdSQL.ORG описано, с чем это связано(или глянуть в каталог DOC устновленного сервера, не помню точно.. Но вроде русскоязычный текст был. И что есть несколько вариантов).. Вроде бы обещали решить проблему в 3,х


 
Anatoly Podgoretsky ©   (2007-11-27 17:02) [13]

> Правильный_Вася  (27.11.2007 15:21:11)  [11]

По индексу будет делаться эта громадная выборка, потом будет проводиться сравнение. Если сравнение по индексу, то будет 10 000 000 сравнений от мин до макс, дешевле сделать выборку и по ней последовательно пройти, а вот тут то и пригодится DESC

И чего там спорить, тут надо план смотреть.



Страницы: 1 вся ветка

Текущий архив: 2008.04.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
2-1206043591
Alex
2008-03-20 23:06
2008.04.20
Отзовитесь те кто работал с BigFloat.pas и UMathServices.pas


2-1206527869
Gavrila
2008-03-26 13:37
2008.04.20
PopupMenu - определить какой Item вызвал событие OnClik


15-1205096265
POP
2008-03-09 23:57
2008.04.20
Запуск программы из под лоадера.


15-1204620182
Washington
2008-03-04 11:43
2008.04.20
HASP HL


8-1178974125
Veter
2007-05-12 16:48
2008.04.20
Удаление TImage