ďťż
 
=?iso-8859-2?q?MySQL_-_nieoptymalne_zapytanie_-_jak_poprawi=E6=3F?= ďťż
 
=?iso-8859-2?q?MySQL_-_nieoptymalne_zapytanie_-_jak_poprawi=E6=3F?=
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

=?iso-8859-2?q?MySQL_-_nieoptymalne_zapytanie_-_jak_poprawi=E6=3F?=



webcm123@gmail.com - 17-06-2007 00:17
=?iso-8859-2?q?MySQL_-_nieoptymalne_zapytanie_-_jak_poprawi=E6=3F?=
  Utworzy?em panel "najnowsze" w CMS-ie. Zapytanie do bazy danych jest
jednak niewydajne.

SELECT z.ID, z.name FROM arts z INNER JOIN cats c ON z.cat=c.ID WHERE
z.access!=2 AND c.access!=3 ORDER BY z.ID DESC LIMIT 0,10

Jak mo?na je zoptymalizowa??

S? 2 tabele - ARTS z literk? Z oraz CATS z literk? C (czy wyrzucenie 1
literki mo?e pomóc?). Nie potrzebuj? pobiera? danych z tabeli CATS,
lecz tylko odwo?a? si? do niej podczas wyboru danych z tabeli ARTS.

Dobrze by by?o, aby zamiast c.access!=3 da?o si? optymalnie wykona?:
(c.access="pl" OR c.access=1)





Piotr Keplicz - 17-06-2007 00:17

  webcm123@gmail.com:

> Utworzy?em panel "najnowsze" w CMS-ie. Zapytanie do bazy danych jest
> jednak niewydajne.
>
> SELECT z.ID, z.name FROM arts z INNER JOIN cats c ON z.cat=c.ID WHERE
> z.access!=2 AND c.access!=3 ORDER BY z.ID DESC LIMIT 0,10
>
> Jak mo?na je zoptymalizowa??

EXPLAIN zapytanie;
Spójrz do manuala, który wyt?umaczy co jest czym w wyniku. Zapewne trzeba
b?dzie zmodyfikowa? nieco indeksy.

..pk.




sg - 17-06-2007 00:17

  webcm123@gmail.com pisze:
> Utworzy?em panel "najnowsze" w CMS-ie. Zapytanie do bazy danych jest
> jednak niewydajne.
>
> SELECT z.ID, z.name FROM arts z INNER JOIN cats c ON z.cat=c.ID WHERE
> z.access!=2 AND c.access!=3 ORDER BY z.ID DESC LIMIT 0,10
>
> Jak mo?na je zoptymalizowa??
>
> S? 2 tabele - ARTS z literk? Z oraz CATS z literk? C (czy wyrzucenie 1
> literki mo?e pomóc?).

Wyrzucenie literki???
Rozumiem, ?e chcesz wyrzuci? tabel? z zapytania, ale si? nie uda skoro
potem jeset odwo?anie do niej przez "c.access!=3".

> Nie potrzebuj? pobiera? danych z tabeli CATS,
> lecz tylko odwo?a? si? do niej podczas wyboru danych z tabeli ARTS.
>
> Dobrze by by?o, aby zamiast c.access!=3 da?o si? optymalnie wykona?:
> (c.access="pl" OR c.access=1)
>

1. Sk?d wiesz, ?e to zapytanie jest nieoptymalne?
2. Jaka jest struktura tabel?
3. Jak wygl?da plan zapytania?
4. Jakie s? indeksy na tych tabelach?
5. Ile jest w nich rekordów?




A.L.E.C - 17-06-2007 00:17

  webcm123@gmail.com wrote:
> Utworzy?em panel "najnowsze" w CMS-ie. Zapytanie do bazy danych jest
> jednak niewydajne.
>
> SELECT z.ID, z.name FROM arts z INNER JOIN cats c ON z.cat=c.ID WHERE
> z.access!=2 AND c.access!=3 ORDER BY z.ID DESC LIMIT 0,10
>
> Jak mo?na je zoptymalizowa??
>
> S? 2 tabele - ARTS z literk? Z oraz CATS z literk? C (czy wyrzucenie 1
> literki mo?e pomóc?). Nie potrzebuj? pobiera? danych z tabeli CATS,
> lecz tylko odwo?a? si? do niej podczas wyboru danych z tabeli ARTS.
>
> Dobrze by by?o, aby zamiast c.access!=3 da?o si? optymalnie wykona?:
> (c.access="pl" OR c.access=1)

zapytania za bardzo si? zoptymalizowa? nie da, ale napisz czy masz
indeks na polu access, jakiego jest ono typu, jakie przyjmuje warto?ci,
poka? te? SELECT COUNT(*) FROM cats GROUP BY access

p.s. czy pole access nie powinno by? w arts?

--
Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252
LAN Management System Developer http://lms.org.pl





webcm123@gmail.com - 17-06-2007 00:17
=?iso-8859-2?q?Re:_MySQL_-_nieoptymalne_zapytanie_-_jak_poprawi=E6=3F?=
  Wynik zapytania EXPLAIN:

Wspólne:
- wymagane przeszukania wszystkich rekordów
- key => NULL (nie u?ywa ?adnego klucza?)
- ref => NULL

Tabela ARTS:
- possible_keys => cat
- extra => using temporary (tego pewnie nie uniknie), where, filesort

Tabela CATS:
- possible_keys => PRIMARY
- rows => 3 (w tabeli s? 4 rekordy)
- extra => using where

Dlaczego nie u?ywa indeksów? :O Je?li nie da si? lepiej zoptymalizowa?
zapytania, b?d? zmuszony tworzy? bufor (cache) w postaci gotowego
pliku .html lub .php.




webcm123@gmail.com - 17-06-2007 00:17
=?iso-8859-2?q?Re:_MySQL_-_nieoptymalne_zapytanie_-_jak_poprawi=E6=3F?=
  Rekordów mam tylko kilka - 8 w arts i 4 w cats. Na polu ACCESS nie ma
indeksu - zreszt? tam tylko mog? by? warto?ci 1 lub 2 (oraz 3, "pl",
"en"... w tabeli CATS). Im wi?cej indeksów, tym wi?kszy rozmiar bazy.
Je?li jednak indeks mo?e przyspieszy? zapytania, by? mo?e go wstawi?.

Przy wy?wietlaniu artyku?ów jest warunek:
WHERE access=1 AND cat=3
jednak zapytanie wykonuje si? szybko (nawet gdy nie by?o klucza CAT).
W tym przypadku indeks CAT jest jednak u?ywany.




A.L.E.C - 17-06-2007 00:17

  webcm123@gmail.com wrote:
> Rekordów mam tylko kilka - 8 w arts i 4 w cats.

Nie roz?mieszaj mnie, to ile trwa wykonanie tego zapytania i jakiego
wyniku by? oczekiwa??

> Na polu ACCESS nie ma
> indeksu - zreszt? tam tylko mog? by? warto?ci 1 lub 2 (oraz 3, "pl",
> "en"... w tabeli CATS). Im wi?cej indeksów, tym wi?kszy rozmiar bazy.
> Je?li jednak indeks mo?e przyspieszy? zapytania, by? mo?e go wstawi?.

Teraz zauwa?y?em, ?e access masz w obu tabelach, je?li mo?e przyjmowa?
tylko dwie warto?ci to indeks pewnie nie wiele da, ale w tabeli cats ju?
mo?e si? przyda?.

--
Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252
LAN Management System Developer http://lms.org.pl




webcm123@gmail.com - 17-06-2007 00:17
=?iso-8859-2?q?Re:_MySQL_-_nieoptymalne_zapytanie_-_jak_poprawi=E6=3F?=
  Kilka wywo?a?: 50ms, 1.3ms, 2.0ms (teraz przyspieszy?o, lecz przy
wi?kszym obci??eniu zapytanie trwa?o ponad 10ms, a nieraz ponad 50ms).

Wniosek: najlepszym wyj?ciem jest tworzenie cache.




=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 17-06-2007 00:17

  webcm123@gmail.com wrote:
> Kilka wywo?a?: 50ms, 1.3ms, 2.0ms (teraz przyspieszy?o, lecz przy
> wi?kszym obci??eniu zapytanie trwa?o ponad 10ms, a nieraz ponad 50ms).
>
> Wniosek: najlepszym wyj?ciem jest tworzenie cache.

Wniosek: testuj porz?dnie, na sensownych danych, a nie wyci?gasz wnioski na
podstawie pseudotestów na pustych tabelach. A klepanie jakiego? cache bez
ZDECYDOWANYCH ku temu przes?anek jest: strat? czasu, proszeniem si?
o k?opoty, komplikowaniem systemu, dodawaniem sobie b??dów...

--
Micha? Kuratczyk




keczerad - 17-06-2007 00:17

  webcm123@gmail.com napisa?(a):
> Rekordów mam tylko kilka - 8 w arts i 4 w cats. Na polu ACCESS nie ma
> indeksu - zreszt? tam tylko mog? by? warto?ci 1 lub 2 (oraz 3, "pl",
> "en"... w tabeli CATS). Im wi?cej indeksów, tym wi?kszy rozmiar bazy.
> Je?li jednak indeks mo?e przyspieszy? zapytania, by? mo?e go wstawi?.
>
> Przy wy?wietlaniu artyku?ów jest warunek:
> WHERE access=1 AND cat=3
> jednak zapytanie wykonuje si? szybko (nawet gdy nie by?o klucza CAT).
> W tym przypadku indeks CAT jest jednak u?ywany.
>

przychylam sie to zdania ALECa, jestes niepowazny testujesz cos na 8
rekordach.

--

keczerad

http://www.e-mo.com.pl
sklep w (X)HTML wraz z modulem do Subiekta GT
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Gdzie MySQL 4.1, a gdzie 5.0? [MS SQL] "set names" (mySQL) w MS SQL oracle -> oracle lub oracle -> mysql replikacja - programy [MySQL] Zwrot tego, co pasuje i nie pasuje :-/ [pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1 [mysql] galeria zdjec - numerowanie zdjec [mysql] CONCAT agregujący, ale nie GROUP_CONCAT() mysql data 0000-00-00 na koniec [MySQL] Problem z zapisem danych w bazie danych jak przenieesc czesc tabeli do innej tabeli MySQL
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.opx.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