Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.055 c
2-1141910495
11111
2006-03-09 16:21
2006.03.26
Ерунда какая-то с числами


4-1136650484
Signate
2006-01-07 19:14
2006.03.26
Запуск приложения принудительно на одном процессоре


9-1126637331
Ricks
2005-09-13 22:48
2006.03.26
Столкновения


3-1138958029
Ega23
2006-02-03 12:13
2006.03.26
Создание View - поясните


1-1140414198
Петрович100
2006-02-20 08:43
2006.03.26
как из bmp файла сделать такой, то есть по цвету в 3d