Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.29;
Скачать: 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 вся ветка

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

Наверх




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


2-1318932404
rammic
2011-10-18 14:06
2012.01.29
Как применить FindComponent на дочерних окнах


15-1317933002
Юрий
2011-10-07 00:30
2012.01.29
С днем рождения ! 7 октября 2011 пятница


2-1319200755
Laguna
2011-10-21 16:39
2012.01.29
"Правильная " сортировка чисел в ListBox


2-1319363512
Nucer
2011-10-23 13:51
2012.01.29
Список записей с быстрым поиском по ключу int64