ďťż
 
[MSSQL] problem z optymalizacja zapytan ďťż
 
[MSSQL] problem z optymalizacja zapytan
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MSSQL] problem z optymalizacja zapytan



pukas - 21-12-2005 12:14
[MSSQL] problem z optymalizacja zapytan
  Witam,
Mam problem z optymalizacją zapytań SQL.
Sytuacja jest następująca: Mam bazę wykonanych telefonów i muszę wybrać
procentowe ilosci konkretnych rodzajów telefonow pogrupowanych na godziny.
Aplikacja napisana w PHP, serwer MSSQL.
Oto moje rozwiązanie:

Jest pętla w pętli. Zewnętrzna wykonuje takie zapytanie:

SELECT COUNT(*) AS Ilosc, { fn HOUR(data_transaction.start_time) } AS godz
FROM Tel
INNER JOIN call_type
INNER JOIN data_transaction
INNER JOIN data_context
ON data_transaction.data_context = data_context.code
ON call_type.code = data_transaction.call_type
ON Tel.easycode = data_context.contact
WHERE (Tel.ct_kamp_id = 12) AND (call_type.name = 'ola' OR call_type.name
= 'ania')
GROUP BY { fn HOUR(data_transaction.start_time) }
ORDER BY { fn HOUR(data_transaction.start_time) };

Z powyzszego zapytania wybieram ilosc rekordow o call_type.name ola i ania,
pogrupowana na godziny oraz godzinę ($godz).

Za kazdym obejsciem pętli zewnętrznej, czyli tyle razy, ile jest godzin w bazie
(max 24, przewaznie ok. 16) muszę pobrać łączną ilość rekordów,
bez wyróżniania konkretnych call_type.name, co robię za pomocą pętli
wewnętrznej i tego zapytania:

SELECT COUNT(*) AS Ilosc, { fn HOUR(data_transaction.start_time) } AS godz
FROM Tel
INNER JOIN call_type
INNER JOIN data_transaction
INNER JOIN data_context
ON data_transaction.data_context = data_context.code
ON call_type.code = data_transaction.call_type
ON $tab.easycode = data_context.contact
WHERE (Tel.ct_kamp_id = 12)
GROUP BY { fn HOUR(data_transaction.start_time) }
HAVING ({ fn HOUR(data_transaction.start_time) }='$godz');

No i przy dosc sporej ilosci rekordow w poszczegolnych tabelach, calosc mieli
sie ok 30 sekund - serwer tego nie wytrzyma,
bo taka akcja bedzie wywolywana co mniej wiecej 20 minut, moze nawet czesciej,
a jest i tak mocno obciazony.
Czy ktos moglby mi pomoc z optymalizacja tych zapytan?
Pozdrawiam, Pukas

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl





pukas - 21-12-2005 12:14

  Dzięki,
już sobie poradziłem.. Uzyłem tablic tymczasowych, do ktorych laduje wyniki obu
zapytan SQL i pozniej "maczowanie" po godzinach wykonuje się już bardzo szybko.
Pozdrawiam, Pukas

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= =?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?= [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= mysql i mysql-front, problem String line; if (line=="cos"){...}....problem Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?= [postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?= [oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?= phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?= [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nocnerozmowy.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com