Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];

Вниз

Оцените эффективность запроса в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
15-1318268712
Jeer
2011-10-10 21:45
2012.01.29
Вот я и стал тестем и приобрел второго сына.


1-1282814003
RG
2010-08-26 13:13
2012.01.29
как в сообщение(ShowMessage) вставить список свозможнотью выбора


2-1318406398
Laguna
2011-10-12 11:59
2012.01.29
Не воспринимается путь к файлу кирилицей


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский