Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 07:40 31.05.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Тема Моля за помощ за SQL заявканови  
Автор st75 (непознат )
Публикувано13.06.11 15:54



select sklad.d_nomer, max(sklad.d_name), sum(col), sum(scol) from sklad
join eksbel on eksbel.nom_nomer_full = sklad.d_nomer
join sklraz on sklraz.snomer_full = sklad.d_nomer
where d_nomer1 = 'B'
group by sklad.d_nomer

Моля за помощ и идеи за тази заявка. Прави следното - от таблицата sklad извлича номенклатурният номер (d_nomer) и наименованието на изделието (d_name), от таблица eksbel извлича продаденото количество, а от таблица sklraz - доставеното количество.

Проблема е, че таблиците са големи и така пусната заявката отнема над минута (при положение, че всичко е индексирано).

Някакви идеи ?



Тема Re: Моля за помощ за SQL заявканови [re: st75]  
Автор Dakota (erotoman)
Публикувано14.06.11 13:04



Пусни един EXPLAIN на заявката и пиши какво връща.

Каква БД е това?



Тема Re: Моля за помощ за SQL заявканови [re: Dakota]  
Автор st75 (непознат )
Публикувано14.06.11 16:41



FireBird е БД.

Това ли имаш предвид за EXPLAIN ?


Plan
PLAN JOIN (SKLAD ORDER SKLAD_NOMNOMER INDEX (LIST_INDEX), SKLRAZ INDEX (SKLRAZ_NOMNOMER), EKSBEL INDEX (EKSBEL_FULLNOMER))

------ Performance info ------
Prepare time = 15ms
Execute time = 1m 13s 360ms
Avg fetch time = 3 056.67 ms
Current memory = 17 514 916
Max memory = 17 779 804
Memory buffers = 2 048
Reads from disk to cache = 10 121 729
Writes from cache to disk = 0
Fetches from cache = 24 011 829



Тема Re: Моля за помощ за SQL заявканови [re: st75]  
Автор Dakota (erotoman)
Публикувано14.06.11 17:27



SELECT

sklad.d_nomer,
MAX(sklad.d_name),
SUM(col),
SUM(scol)
FROM
sklad JOIN eksbel
ON
eksbel.nom_nomer_full = sklad.d_nomer JOIN sklraz
ON
sklraz.snomer_full = sklad.d_nomer
WHERE
d_nomer1 = 'B'
GROUP BY
sklad.d_nomer;



Нямам никакъв опит с Firebird, а и този explain нищо не ми говори. Но, опитай да елиминараш част от join-овете и условията и гледай кога драстично ще се ускори. Така ще разбереш точно коя част ти се бави.

Най-малкото, какво става ако избереш само от едната таблица:

SELECT COUNT(*) FROM sklad WHERE d_nomer1 = 'B'


Колко бързо е това? Съвпадат ли типовете на полетата, по които свързваш таблиците? Има ли индекси на тях?... Колко е общият брой записи в другите две таблици?...



Тема Re: Моля за помощ за SQL заявка [re: st75]  
Автор croesus (хлевоуст)
Публикувано14.06.11 20:49



Какво точно върши следната част:

max(sklad.d_name)

Максимална стойност от текстово поле (наименование на изделието, както казваш)??



Тема Re: Моля за помощ за SQL заявканови [re: st75]  
Автор wqw (АзСъмЖив)
Публикувано16.06.11 00:35



Пробвай с UNION така някак

       SELECT s.d_nomer

, (SELECT d_name FROM sklad WHERE d_nomer = s.d_nomer) AS d_name
, SUM(col) AS col
, SUM(scol) AS scol
FROM (
SELECT nom_nomer_full AS d_nomer
, col
, 0 AS scol
FROM eksbel

UNION ALL

SELECT snomer_full
, 0
, scol
FROM sklraz
) s
GROUP BY s.d_nomer




Тема Re: Моля за помощ за SQL заявканови [re: st75]  
Автор Mixy (@#$%^)
Публикувано17.06.11 12:07



>>> Проблема е, че таблиците са големи...

Все пак, по колко реда са?

Mixy



Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.