Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как обойти Timeot Expired [D6, MSSQL]


Страницы:   1 2 3

tormoz ©   (2005-08-11 15:26:00) 

Здравствуйте. Есть две таблицы: в первой 1550000 записей, во второй 950000. Необходимо выполнить запрос
SELECT     pf1.*
FROM         pf1 INNER JOIN
                     pfp ON pf1.SPOL = pfp.S_POL AND pf1.NPOL = pfp.N_POL

Точнее надо в первой таблице изменить значение одного поля, которое будет браться из второй таблицы по соответствию двух полей. Но не то что update, даже просто select не выполняется: пишет Timeout expired. Посоветуйте что-нибудь. Запросы пытаюсь выполнить через SQL Server Enterprise Manager.


Nikolay M.   (2005-08-11 16:53:00) [41]


> sniknik ©   (11.08.05 16:33) [12]
> для изменения одного поля, полное обьеднение... сделай левое.
> не в пример быстрее отработает

А вот я интересуюсь, откуда такая однозначность?
Честно говоря, для меня это вообще до наст. времени неизвестный факт, где-бы подтверждение найти?


Fay   (2005-08-11 16:43:00) [42]

2 sniknik ©   (11.08.05 16:38) [15]
1) Вам бы сцнарии для ужастиков писать.
2) left join, конечно, совсем иначе работает, т.к. в общем случае возвращает больше записей. Так? Просто смешно.
3) Предлагаю подождать план запроса.


sniknik   (2005-08-11 16:38:00) [43]

Fay ©   (11.08.05 16:35) [13]
ну... данный случай рассматриваем? тогда, представь себе полное декартово обьеденение по этим таблицам (обьемам). представил? а ведь делается полное при иннер а после отсекаются неподходящие.


sniknik   (2005-08-11 16:36:00) [44]

да, недосмтрел... добавка к запросу
WHERE pfp.S_POL IS NOT NULL

(иначе при переносе в апдейт потреш записи при пустых, ненайденых полях)


Fay   (2005-08-11 16:35:00) [45]

2 sniknik ©   (11.08.05 16:33) [12]
>> сделай левое. не в пример быстрее отработает
Слишком категорично. Бывает быстрее, не более того. А бывает не в пример медленнее.


sniknik   (2005-08-11 16:33:00) [46]

для изменения одного поля, полное обьеднение... сделай левое. не в пример быстрее отработает
SELECT pf1.*
FROM pf1 LEFTJOIN pfp ON pf1.SPOL=pfp.S_POL AND pf1.NPOL=pfp.N_POL

плюс предварительно сделай индексы на полях pf1.SPOL и pf1.NPOL (в принципе на присоеденяемой таблице тоже не помешают... но эти вожнее)  
глядиш и вложишся в таймаут. ;о))

а нет, то выполняй в QA там этот параметр можно изменить(может и в EM можно но не знаю как). в QA правой кнопкой мыши на сервере -> scripting options -> connections -> query time aut.
да и просто так, все одно выполняй в QA.


tormoz   (2005-08-11 16:32:00) [47]


> Fay ©   (11.08.05 16:23) [9]

это к чему? так же не работает - висит, делает вид, что выполняется, и - НИЧЕГО...


Fay   (2005-08-11 16:24:00) [48]

2 tormoz   (11.08.05 16:18) [7]
И вАщЕ, давай струкатуру этих таблиц с индексами!


Fay   (2005-08-11 16:23:00) [49]

2 tormoz   (11.08.05 16:18) [7]
set showplan_text on
go
set noexec on
update pf1
set pf1.ndog=pfp.ndog
from pf1,pfp
where (pf1.spol=pfp.s_pol) and (pf1.npol=pfp.n_pol)


Fay   (2005-08-11 16:19:00) [50]

2 tormoz   (11.08.05 16:18) [7]
План запроса не покажешь?


tormoz   (2005-08-11 16:18:00) [51]

индексы - естественно, а тригеры пока еще не разрабатывал... потом надо будет делать, но не на update.


Fay   (2005-08-11 16:17:00) [52]

2 tormoz   (11.08.05 16:10) [5]
А индексы есть? А триггеры?


tormoz   (2005-08-11 16:10:00) [53]

так ничего и не работает. сейчас пробую QA, запрос
update pf1
set pf1.ndog=pfp.ndog
from pf1,pfp
where (pf1.spol=pfp.s_pol) and (pf1.npol=pfp.n_pol)

выполняется уже 13 минут... :-(


Nikolay M.   (2005-08-11 16:09:00) [54]

Думаю, дело не в фетче. Ради эксперимента можно, конечно, поставить SELECT TOP 1 ...., но никто, имхо, в здравом уме не будет обрывать процесс передачи данных. Ко мне не раз приползал миллион записей, когда условие связки для какой-нибудь таблицы упускал - и ничего :)
А вот наличие индексов по связываемым полям и конфигурация сервера  - это более актуальные вопросы.


Fay   (2005-08-11 16:00:00) [55]

2 Nikolay M. ©   (11.08.05 15:52) [2]

>> Он имеет ввиду, что если селект отваливается по таймауту, то апдейт - тем более.

Представь на секунду, что автор юзает клиентский курсор и ждёт когда к нему вползёт 950000 записей.


Nikolay M.   (2005-08-11 15:52:00) [56]


> Fay ©   (11.08.05 15:37) [1]

Он имеет ввиду, что если селект отваливается по таймауту, то апдейт - тем более.


> пишет Timeout expired

Увеличить? И чем QA не угодил для выполнения запросов?


Fay   (2005-08-11 15:37:00) [57]

2 tormoz   (11.08.05 15:26)
1) CommandTimeout = много.
2) Нафиг тебе SELECT?! Типа такого не прокатит?
 update T1 set
   T1.Field2 = T2.Field2
 from Table1 T1, Table2 T2
 where T1.Field1 = T2.Field1


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо