ďťż
 
[MySQL] jak zoptymalizować zapytanie? ďťż
 
[MySQL] jak zoptymalizować zapytanie?
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

[MySQL] jak zoptymalizować zapytanie?



Grzesiek - 27-07-2007 00:01
[MySQL] jak zoptymalizować zapytanie?
  Witam!

Mam takie tabele:

1. desc CZASY
id01 char(15)
dep01 char(4)
kom01 char(5)
a decimal(5,2)

Indeksy dla CZASY:
Nazwa klucza Typ Moc Pole
PRIMARY PRIMARY 432 id01
id01 INDEX 3 id01
kom01 INDEX 14 kom01

2. desc PROGNOZA
id char(15) Nie
b01 decimal(7,0) Nie 0
b02 decimal(7,0) Nie 0
......
b52 decimal(7,0) Nie 0
CUSER char(10) Nie
CWSID char(10) Nie
CDATE decimal(6,0) Nie 0
CTIME

Indeksy dla PROGNOZA
Nazwa klucza Typ Moc Pole
PRIMARY PRIMARY 308 id
CUSER INDEX 6 CUSER

3. PROGNOZA_TEMP jest kopią PROGNOZA

SELECT SUM((A/100)* $B01) FROM PROGNOZA LEFT JOIN
CZASY ON CZASY.ID01 = PROGNOZA.ID WHERE ID IN (SELECT ID01 FROM CZASY WHERE
DEP01 ='DEPART01' )
AND ID NOT IN (SELECT ID FROM PROGNOZA_TEMP LEFT JOIN CZASY ON CZASY.ID01 =
PROGNOZA_TEMP.ID WHERE DEP01 ='DEPART01')

Teraz te zapytanie wywoływane jest w pętli
(PHP) no i strona sie troszkę długo otwiera. Czy macie jakis pomysł aby
zoptymalizować te zapytanie?Moze niepoprawnie ustawiłem indeksy?
Dzięuję bardzo za pomoc.

Pozdrawiam Grzesiek

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





=?ISO-8859-2?Q?Rafa=B3_Korszu=F1?= - 27-07-2007 00:01

  Grzesiek napisał(a):
> Witam!
>
>
> 3. PROGNOZA_TEMP jest kopią PROGNOZA
>
> SELECT SUM((A/100)* $B01) FROM PROGNOZA LEFT JOIN
> CZASY ON CZASY.ID01 = PROGNOZA.ID WHERE ID IN (SELECT ID01 FROM CZASY WHERE
> DEP01 ='DEPART01' )
> AND ID NOT IN (SELECT ID FROM PROGNOZA_TEMP LEFT JOIN CZASY ON CZASY.ID01 =
> PROGNOZA_TEMP.ID WHERE DEP01 ='DEPART01')
>
>

Witam,
Spróbuj najpierw dać explain na tym zapytaniu i zobaczyć co się dzieje,
i spróbuj zrobić całość w 1 zapytaniu a następnie w pętli obrabiaj wynik.

Rafał

--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych




scss@poczta.onet.pl - 27-07-2007 00:01

  Dzięki za szybką odpowiedź

Niżej wynik explaina, którego zrobiłem zanim napisałem na grupę.
I właśnie za pomocą explaina wybrałem indeksy.
Po ustawieniu indeksów pomogło, ale to jeszcze nie to...

Co do jednego zapytania... właśnie próbuję, ale mam ciągle coś nie tak.
Spróbuję jeszcze jak radzisz wrzucić do pętli jednym zapytaniem chociaż boję się
ze będzie jeszcze gorzej, bo danych jest dużo i z kolei www, js i php się zamulą.

*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: PROGNOZA
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 308
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: PRIMARY
table: CZASY
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 45
ref: PROGNOZA.ID
rows: 1
Extra:
*************************** 3. row ***************************
id: 3
select_type: DEPENDENT SUBQUERY
table: PROGNOZA_TEMP
type: system
possible_keys: PRIMARY,ID
key: NULL
key_len: NULL
ref: NULL
rows: 1
Extra:
*************************** 4. row ***************************
id: 3
select_type: DEPENDENT SUBQUERY
table: CZASY
type: const
possible_keys: PRIMARY,DEP01
key: PRIMARY
key_len: 45
ref: const
rows: 1
Extra:
*************************** 5. row ***************************
id: 2
select_type: DEPENDENT SUBQUERY
table: ITEMROUT
type: unique_subquery
possible_keys: PRIMARY,DEP01
key: PRIMARY
key_len: 45
ref: func
rows: 1
Extra: Using index; Using where

Jeszcze raz dzięki za pomoc.
Pozdrawiam Grzesiek

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




=?ISO-8859-2?Q?Rafa=B3_Korszu=F1?= - 27-07-2007 00:01

  scss@poczta.onet.pl napisał(a):
> Dzięki za szybką odpowiedź
>
> Niżej wynik explaina, którego zrobiłem zanim napisałem na grupę.
> I właśnie za pomocą explaina wybrałem indeksy.
> Po ustawieniu indeksów pomogło, ale to jeszcze nie to...
>
> Co do jednego zapytania... właśnie próbuję, ale mam ciągle coś nie tak.
> Spróbuję jeszcze jak radzisz wrzucić do pętli jednym zapytaniem chociaż boję się
> ze będzie jeszcze gorzej, bo danych jest dużo i z kolei www, js i php się zamulą.
>
>
>
próbowałeś odwrócić warunki w zapytaniu ??

Rafał
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 27-07-2007 00:01

  Grzesiek wrote:
> Witam!
>
>
> SELECT SUM((A/100)* $B01) FROM PROGNOZA LEFT JOIN
> CZASY ON CZASY.ID01 = PROGNOZA.ID WHERE ID IN (SELECT ID01 FROM CZASY WHERE
> DEP01 ='DEPART01' )
> AND ID NOT IN (SELECT ID FROM PROGNOZA_TEMP LEFT JOIN CZASY ON CZASY.ID01 =
> PROGNOZA_TEMP.ID WHERE DEP01 ='DEPART01')
>
> Teraz te zapytanie wywoływane jest w pętli
> (PHP) no i strona sie troszkę długo otwiera. Czy macie jakis pomysł aby
> zoptymalizować te zapytanie?Moze niepoprawnie ustawiłem indeksy?
> Dzięuję bardzo za pomoc.

1. Formatowanie kodu JEST WAŻNE. Szczególnie jak oczekujesz od innych poomocy na
jego temat.
2. Jaki jest czas wykonania zapytania?
3. Jak wygląda pętla, bo to tu masz problem?

--
P.M.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • misida.pev.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