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

Вниз

Не выполняется запрос   Найти похожие ветки 

 
AlexA   (2002-07-19 15:46) [0]

Имеются три таблицы

Workers (сотрудники)
Tn - integer (табельный номер) /индекс/
FIO - CHAR ( .. ) ФИО
Pol - char(1) Пол
Date_rogden - Data дата рождения /индекс/

Dopz_All (зарплата по месяцам)
Tn - integer (табельный номер) /индекс/
mes_vidach - smallint (месяц выдачи) /индекс/
VO smallint - вид оплаты /индекс/
Summa numeric(15,3) сумма
Spz Char (5) счет

z_kod_otch (настройки по видам оплат)
VO smallint - вид оплаты /индекс/
pen smallint - 0 или 1 идут ли отчисления в песионый фонд

Пишу такой запрос.
Запрос содержит два вложенных.
1 вложенный ищет сотрудников с указаным полом и возростом.
2 вложенный ищет сотрудников у которых в пятом месяце сумму начислений облагеемой пенсионом фондом (Z.pen=1) больше 30000
И наконец основной запрос ищет сумму начислений облагеемой пенсионом фондом (Zа.pen=1) для найденных сотрудников
select Sum(summa) from dopz_All Da, z_kod_otch Za
where Da.Tn in ( select Tn from dopz_All D, z_kod_otch Z
where D.Tn in (
select tn from workers W
where (W.pol="М" and W.Date_rogden<"01.01.1953") or (W.pol="Ж" and W.Date_rogden<"01.01.1957")
)
and Z.pen=1 and D.Vo=Z.vo and D.Spz is not null and D.mes_vidach<6
group by tn
having sum(summa)-30000>0
)
and Za.pen=1 and Da.Vo=Za.vo and Da.Spz is not null and Da.mes_vidach=6

PLAN (W INDEX (WORKERS_TN,WORKERS_DATE_ROGDEN,WORKERS_DATE_ROGDEN))
PLAN SORT (JOIN (Z INDEX (Z_KOD_OTCH_PEN),D INDEX (DOPZ_ALL_VO,DOPZ_ALL_MES_VIDACH)))
PLAN JOIN (ZA INDEX (Z_KOD_OTCH_PEN),DA INDEX (DOPZ_ALL_VO,DOPZ_ALL_MES_VIDACH))

SUM
================

<null>
Этот запрос выполняется быстро. Видимо всвязи с тем что нет данных в шестом месяце (Da.mes_vidach=6).
//////////////
Сдвигаю дату на один месяц

Выполняю часть предыдущего вопроса
select Tn from dopz_All D, z_kod_otch Z
where D.Tn in (
select tn from workers W
where (W.pol="М" and W.Date_rogden<"01.01.1953") or (W.pol="Ж" and W.Date_rogden<"01.01.1957")
)
and Z.pen=1 and D.Vo=Z.vo and D.Spz is not null and D.mes_vidach<5
group by tn
having sum(summa)-20000>0

PLAN (W INDEX (WORKERS_TN,WORKERS_DATE_ROGDEN,WORKERS_DATE_ROGDEN))
PLAN SORT (JOIN (Z INDEX (Z_KOD_OTCH_PEN),D INDEX (DOPZ_ALL_VO,DOPZ_ALL_MES_VIDACH)))

TN
======

12
28
260
304

Elapsed time= 12.79 sec
Этот запрос выполяется уже подольше.
/////////
Выполняю запрос с полученными данными
select Sum(Da.summa) from dopz_All Da, z_kod_otch Za
where Da.Tn in ( 12,28,260,304
)
and Za.pen=1 and Da.Vo=Za.vo and Da.Spz is not null and Da.mes_vidach=6

PLAN JOIN (ZA INDEX (Z_KOD_OTCH_PEN),DA INDEX (DOPZ_ALL_VO,DOPZ_ALL_MES_VIDACH,DOPZ_ALL_TN,DOPZ_ALL_TN,DOPZ_ALL_TN,DOPZ_ALL_TN))

SUM
======================

25556.910

Elapsed time= 0.95 sec

Все отлично
////////
Пишу запрос полностью.
select Sum(Da.summa) from dopz_All Da, z_kod_otch Za
where Da.Tn in ( select D.Tn from dopz_All D, z_kod_otch Z
where D.Tn in (
select W.tn from workers W
where (W.pol="М" and W.Date_rogden<"01.01.1953") or (W.pol="Ж" and W.Date_rogden<"01.01.1957")
)
and Z.pen=1 and D.Vo=Z.vo and D.Spz is not null and D.mes_vidach<5
group by tn
having sum(summa)-20000>0
)
and Za.pen=1 and Da.Vo=Za.vo and Da.Spz is not null and Da.mes_vidach=5

и все приплыли. IBServer занимает ресурсы ЦП. Запрос не выполняется. К серверу можно подключаться из других программ - работают нормально
Прошло около 1,5 часа. Сообщение connection lost to database
IBServer освободил ЦП.
Что делать. Посоветуйте плиз.
Извините за размер вопроса


 
-=Sergeante=-   (2002-07-19 17:08) [1]

Как всегда: если поля не индексированы - проиндексируй.

На мой взгляд, подход неправильный.

Попробуй вместо
select D.Tn from dopz_All D, z_kod_otch Z
where D.Tn in (
select W.tn from workers W
where (W.pol="М" and W.Date_rogden<"01.01.1953") or (W.pol="Ж" and W.Date_rogden<"01.01.1957")
)
and Z.pen=1 and D.Vo=Z.vo and D.Spz is not null and D.mes_vidach<5
group by tn
having sum(summa)-20000>0


вот это...

select D.Tn, W.tn from dopz_All D, z_kod_otch Z, workers W
where
D.Tn=W.tn and ((W.pol="М" and W.Date_rogden<"01.01.1953") or (W.pol="Ж" and W.Date_rogden<"01.01.1957"))
and Z.pen=1 and D.Vo=Z.vo and D.Spz is not null and D.mes_vidach<5
group by tn
having sum(summa)-20000>0


 
-=Sergeante=-   (2002-07-19 17:11) [2]

А... Тогда у тя группировка работать не будит, кажись. Если не работает, то сорри.

Но много все же вложенных запросов.


 
Desdechado   (2002-07-19 17:18) [3]

PLAN SORT - очень плохо
а вообще подзапросы старайся не использовать, особенно каскадом. получается, что для каждой строки главного подзапроса вып-ся подзапрос 2 уровня, а для каждой строки 2 уровня - подзапрос 3 уровня. а теперь посчитай сколько же их всего.


 
Шамиль   (2002-07-24 14:31) [4]

В FOX-е я бы сделал так:

select D.Tn , sum(D.SUMMA) as ITOG
from dopz_All D, z_kod_otch Z
where D.Tn in (
select tn from workers W
where (W.pol="М" and W.Date_rogden<"01.01.1953")
or (W.pol="Ж" and W.Date_rogden<"01.01.1957")
)
and Z.pen=1 and D.Vo=Z.vo and D.Spz is not null and D.mes_vidach<5
group by tn
having ITOG-20000>0

а после командой sum ITOG получил бы общий итог.



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

Форум: "Базы";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
4-35503
Yuri Btr
2002-05-31 15:01
2002.08.12
Убить приложение зная только его исполняемый файл


1-35328
valdn
2002-07-25 17:02
2002.08.12
просмотр перед печатью


1-35286
Smok_er
2002-07-31 14:49
2002.08.12
XP Style и манифест файл


1-35380
Dinara
2002-07-30 23:37
2002.08.12
Как получить абсолютный индекс выделенного итема в TreeView?


4-35517
Rurik
2002-06-06 12:23
2002.08.12
Console redirect





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский