Текущий архив: 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.47 MB
Время: 0.034 c