Главная страница
    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.006 c
1-35294
basic
2002-07-29 12:51
2002.08.12
RxLib 5


1-35305
ValeX
2002-07-29 16:04
2002.08.12
ReadFile :(((


1-35370
Tolstomordik
2002-07-30 17:28
2002.08.12
Перевод из WIN-кодировки в DOS-кодировку.


4-35490
ДимкаН
2002-06-03 15:16
2002.08.12
Помогите, плз, найти ошибку


7-35488
Timon
2002-05-27 14:40
2002.08.12
---|Ветка была без названия|---





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