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

Вниз

Что не так в запросе?   Найти похожие ветки 

 
Ivanov Sergey   (2006-01-27 13:31) [0]

Есть запрос:
select
 BLR_BIL_ID,
 BLR_TIMEST,
 BLR_KRD_ID,
 BLR_COUNT,
 BLR_PRICE,
 BLR_COUNT*BLR_PRICE as sum_row
from
 BILLROW
where
 BLR_BIL_ID IN (select bil_id from BILLS where BIL_Type_id = 1 AND BIL_TIMEST_BEG >= "01.10.2005")
order by
 BLR_TIMEST;


выполняется 2 часа!
в BILLROW 54000 записей, IN (select bil_id fro... возвращает 254 элемента.
без условий любая из этих конструкций выполняется менее одной сек.


 
Sergey13 ©   (2006-01-27 13:34) [1]

А так если?
select
BLR_BIL_ID,
BLR_TIMEST,
BLR_KRD_ID,
BLR_COUNT,
BLR_PRICE,
BLR_COUNT*BLR_PRICE as sum_row
from
BILLROW,BILLS
where
BLR_BIL_ID=BILLS.bil_id and  BIL_Type_id = 1 AND BIL_TIMEST_BEG >= "01.10.2005"
order by
BLR_TIMEST


 
Sergey13 ©   (2006-01-27 13:35) [2]

БД какая?


 
Ivanov Sergey   (2006-01-27 13:37) [3]

С такого варианта я начал. По ходу добавил индекы по полям учавствующим в сортировке и фильтрации. по времени может и еще больше я не дождался...

С уважением Иванов Сергей.


 
Ivanov Sergey   (2006-01-27 13:38) [4]

Опс... забыл поставить галку - IB6.0


 
Johnmen ©   (2006-01-27 13:42) [5]

1.
...
from
BILLROW
JOIN BILLS ON BLR_BIL_ID=BILLS.bil_id
where
BIL_Type_id = 1 AND BIL_TIMEST_BEG >= "01.10.2005"
...

2.
Может тормозить ещё сортировка. => нужен индекс по полю сортировки.


 
Sergey13 ©   (2006-01-27 13:44) [6]

>выполняется 2 часа!
А бекап/ресторе нормально выполняются? Что-то сильно уж много.

> IB6.0
Стандартная рекомендация - выкинуть нафик и поставить FireBird.


 
Ivanov Sergey   (2006-01-27 13:47) [7]

Прошу прощения, не досмотрел, но вариант Sergey13 ©   (27.01.06 13:34) [1] не такой как был у меня. И главное он выполняется сразу!

Вопрос только почему?


 
Johnmen ©   (2006-01-27 13:47) [8]


> Sergey13 ©   (27.01.06 13:44) [6]
> >выполняется 2 часа!
> ...Что-то сильно уж много.


Это у него оптимизатор дурит. Выполняет внутренний запрос для каждой записи внешнего.


 
Ivanov Sergey   (2006-01-27 13:49) [9]

Быкап и ресторе делаются нормально.  А про выбросить и заменить так 6.0 бесплатен.


 
Sergey13 ©   (2006-01-27 13:49) [10]

2[7] Ivanov Sergey   (27.01.06 13:47)
>Вопрос только почему?
Для ответа надо бы на твой взглянуть. И план бы желательно увидеть.

ЗЫ: Оператор IN - это последнее к чему следует прибегать в запросе. Когда по другому - никак. ИМХО.


 
Sergey13 ©   (2006-01-27 13:51) [11]

2[9] Ivanov Sergey   (27.01.06 13:49)
> А про выбросить и заменить так 6.0 бесплатен.
FB не дороже стОит. 8-) Только глюков на порядок меньше.


 
Ivanov Sergey   (2006-01-27 13:53) [12]

мой запрос

select
 BLR_BIL_ID,
 BLR_TIMEST,
 BLR_KRD_ID,
 BLR_COUNT,
 BLR_PRICE,
 BLR_COUNT*BLR_PRICE as sum_row
from
 BILLROW
where
 BLR_BIL_ID IN (select bil_id from BILLS where BIL_Type_id = 1 AND BIL_TIMEST_BEG >= "01.10.2005")
order by
 BLR_TIMEST;


после препаре:
PLAN (BILLS NATURAL)
PLAN SORT ((BILLROW NATURAL))


 
Sergey13 ©   (2006-01-27 14:03) [13]

2 [12] Ivanov Sergey   (27.01.06 13:53)
Это тот же что в сабже. А тот вариант,с которого начинал и было долго?


 
Ivanov Sergey   (2006-01-27 14:08) [14]

вот так было в начале. Просто пришлось подряд много раз выборки делать и как то задумался что там можно делать с 20 мегабайтной базой в течении 2ух часов, потом вынес выборку в подзапрос а лучше не стало или стало не сильно лучше.

select
 BLR_BIL_ID,
 BLR_TIMEST,
 BLR_KRD_ID,
 BLR_COUNT,
 BLR_PRICE,
 BLR_COUNT*BLR_PRICE as sum_row
from
 BILLROW
 left join bills on BLR_BIL_ID = BIL_ID
where
 BIL_TYPE_ID = 1 and  BIL_TIMEST_BEG >= "01.10.2005"
order by
 BLR_TIMEST;


 
Sergey13 ©   (2006-01-27 14:11) [15]

2 [14] Ivanov Sergey   (27.01.06 14:08)
> [3] Ivanov Sergey   (27.01.06 13:37)
> По ходу добавил индекы по полям учавствующим в сортировке и фильтрации
Наверное индексов нужных еще не было. Хотя 2 с лишним часа - это явный и непонятный перебор для полсотни тыщ записей.


 
Виталий Панасенко   (2006-01-27 14:37) [16]

select
B.BLR_BIL_ID,
B.BLR_TIMEST,
B.BLR_KRD_ID,
B.BLR_COUNT,
B.BLR_PRICE,
B.BLR_COUNT*B.BLR_PRICE as sum_row
from
BILLROW B, BILLS B2
where
B.BLR_BIL_ID=B2.bil_id AND B2.BIL_Type_id = 1 AND B2.BIL_TIMEST_BEG >= "01.10.2005"
order by
B.BLR_TIMEST;

Не канает ? не проверял. А не лучше ли ХП с for do... создать ?


 
Vemer ©   (2006-01-27 16:57) [17]

Вариант с Exists, (до кучи:)):

select
BLR_BIL_ID,
BLR_TIMEST,
BLR_KRD_ID,
BLR_COUNT,
BLR_PRICE,
BLR_COUNT*BLR_PRICE as sum_row
from
BILLROW
where
EXISTS (select bil_id from BILLS where bil_id = BLR_BIL_ID And BIL_Type_id = 1 AND BIL_TIMEST_BEG >= "01.10.2005")
order by
BLR_TIMEST;


 
Johnmen ©   (2006-01-27 17:04) [18]

>Vemer ©   (27.01.06 16:57) [17]

Это будет тормозить гарантированно. С максимальной степенью...


 
SpellCaster   (2006-01-31 14:08) [19]

Вложенные запросы выполняются для каждой записи. Потому и тормозит


 
Johnmen ©   (2006-01-31 14:19) [20]

>Вложенные запросы выполняются для каждой записи.

Не всегда. Зависит от конкретного вида запроса и оптимизатора. Уже говорил [8].



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

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

Наверх





Память: 0.49 MB
Время: 0.034 c
2-1141706207
trych
2006-03-07 07:36
2006.03.26
дата


2-1142336251
zorik
2006-03-14 14:37
2006.03.26
Репликация


15-1141599465
Andy BitOff
2006-03-06 01:57
2006.03.26
Помогите понять код на С


4-1135930291
oleggar
2005-12-30 11:11
2006.03.26
в чем я не прав ?о хуках


2-1141169056
spogi
2006-03-01 02:24
2006.03.26
Kak v QReport pokazat dannie iz raznix tablic, ili summirovat ix





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