Вниз
Скачать: CL | DM;

Оцените эффективность запроса в FireBird   Найти похожие ветки 

← →
kudatsky   (2010-04-06 11:15) [0]

Таблица проектируемой БД будет содержать несколько миллионов записей. Поле NPP - первичный ключ. Необходимо присвоить полю SELECTED значение "T" для некоторых записей. Количество этих записей может меняться от 1 до всех записей в таблице. Перечень NPP записей, для которых необходимо выполнить присваивание, хранится в массиве. Предполагаю программно строить запрос вида:

update listprv set SELECTED="T" where npp in (1,5,25,...)

где в скобках будет список всех значений поля NPP изменяемых записей.
Вопрос: насколько такой запрос будет эффективен? Выполнится ли он вообще ? Кстати-программа интерактивная, и если запрос будет выполняться несколько митут, то пользователь заскучает.


← →
Sergey13 ©   (2010-04-06 11:19) [1]

> [0] kudatsky   (06.04.10 11:15)
> Выполнится ли он вообще ?

Для нескольких записей выполнится, для большого количества нет. Есть ограничение на длину запроса.
Можно записи помещать в специальную таблицу и джойнить с основной.


← →
MsGuns ©   (2010-04-06 11:21) [2]

Проще все ключи, для которых надо сделать апдэйт, поместить во временную таблицу, запрос же реализовтаь простой связкой


← →
kudatsky   (2010-04-06 11:25) [3]

>MsGuns
Если можно, популярнее ...


← →
Anatoly Podgoretsky ©   (2010-04-06 11:44) [4]

> kudatsky  (06.04.2010 11:15:00)  [0]

Очень неэффективно.


← →
kudatsky   (2010-04-06 12:12) [5]

Если я правильно понял MsGuns, нужно создать таблицу TEMP с единственным полем NPP, поместить туда все значения NPP и выпонить такой оператор

update listprv set SELECTED="T" where listprv.npp=temp.npp


← →
MsGuns ©   (2010-04-07 10:44) [6]

Правильно понял


← →
PEAKTOP ©   (2010-04-07 11:55) [7]

update listprv set SELECTED="T" where npp in (1,5,25,...)


Запрос такого вида будет распарсен оптимизатором в
update listprv set SELECTED="T" where ((npp =1) or (npp =5) or (...))

Гораздо эффективнее по скорости будет:

EXECUTE BLOCK(
 Q_NNP_IDS BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET WIN1251 = ?NNP_IDS
)AS
BEGIN
 UPDATE LISTPRV L SET
   L.SELECTED = "T"
 WHERE (:Q_NNP_IDS CONTAINING "~"||L.ID||"~");
END


При этом список ID передается в виде строки:
"~1~5~10~12~...~156~"


← →
Правильный$Вася   (2010-04-08 17:41) [8]


> Проще все ключи, для которых надо сделать апдэйт, поместить
> во временную таблицу

а что, в FB появились временные таблицы?


← →
Виталий Панасенко(дом)   (2010-04-08 17:45) [9]

конечно!


← →
Правильный$Вася   (2010-04-08 18:15) [10]

эх, вот что значит застрять на полторушке...
кста, автор версию-то не указал


← →
Jeer ©   (2010-04-08 18:17) [11]

Оптимизировать


> where npp in (1,5,25,...)

or (in > 50) and  (in < 1000)
и тд


← →
Виталий Панасенко(дом)   (2010-04-08 19:39) [12]


> Правильный$Вася   (08.04.10 18:15) [10]
>
> эх, вот что значит застрять на полторушке...
> кста, автор версию-то не указал

Еще  и CTE появились..триггеры на БД... а в 2,5 - регулярные выражения для поиска.. и многое другое


← →
Anatoly Podgoretsky ©   (2010-04-08 19:47) [13]

> Правильный$Вася  (08.04.2010 18:15:10)  [10]

А ему это неинтересно и так должно пойти.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.004 c
2-1319306729
Katie
2011-10-22 22:05
2012.01.29
caption для лейб


15-1318241847
Demo
2011-10-10 14:17
2012.01.29
ПО для терминалов


2-1319387079
Анна
2011-10-23 20:24
2012.01.29
срочна нужна помощь в написании прогррамм...


15-1318427502
Бездомный
2011-10-12 17:51
2012.01.29
Юморок


2-1318857607
Бездомный
2011-10-17 17:20
2012.01.29
Клонировать компонент в runtime.




   Наверх