ďťż
 
optymalizacja zapytania - MySQL ďťż
 
optymalizacja zapytania - MySQL
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

optymalizacja zapytania - MySQL



przemo - 21-11-2006 00:02
optymalizacja zapytania - MySQL
  Witam

Prosze o pomoc w optymalizacji zapytania.
Zapytanie ponizsze wraz ze wzrostem bazy coraz czesciej trwa za dlugo.
Probowalem to zapytanie przebudowac (wersja 2) ale nie
pomoglo to wydajnosci.

Wersja 1:

SELECT id, user_id, nazwa, opis, producent, cena, vat, photo
FROM produkty
WHERE promocja =1
AND aktywny =1
ORDER BY rand( )
LIMIT 5 ;

Wersja 2:

SELECT id, user_id, nazwa, opis, producent, cena, vat, photo
FROM produkty
WHERE id
IN (
SELECT id
FROM produkty
WHERE promocja =1
AND aktywny =1
ORDER BY rand( )
)
LIMIT 5 ;

Kolumna "promocja" zawiera tylko 1 lub 0. Ma ona index ale nie jest on
wykorzystywany w zapytaniu.

Pozdrawiam :-)
Przemo





Artur Muszynski - 21-11-2006 00:02

  przemo wrote:
> SELECT id, user_id, nazwa, opis, producent, cena, vat, photo
> FROM produkty
> WHERE promocja =1
> AND aktywny =1

Podobne pytanie przewijało się kilka razy.
Tabela promocje (id_produktu), aktywne (id_produktu)
Lub status SET ('promocja','aktywny')
To drugie może nie pomóc.

> ORDER BY rand( )

ciekawe...

artur




Paweł Matejski - 21-11-2006 00:02

  przemo wrote:
> Witam
>
>
> Prosze o pomoc w optymalizacji zapytania.
> Zapytanie ponizsze wraz ze wzrostem bazy coraz czesciej trwa za dlugo.
> Probowalem to zapytanie przebudowac (wersja 2) ale nie
> pomoglo to wydajnosci.
>
> Wersja 1:
>
> SELECT id, user_id, nazwa, opis, producent, cena, vat, photo
> FROM produkty
> WHERE promocja =1
> AND aktywny =1
> ORDER BY rand( )
> LIMIT 5 ;
>
> Wersja 2:
>
> SELECT id, user_id, nazwa, opis, producent, cena, vat, photo
> FROM produkty
> WHERE id
> IN (
> SELECT id
> FROM produkty
> WHERE promocja =1
> AND aktywny =1
> ORDER BY rand( )
> )
> LIMIT 5 ;
>
> Kolumna "promocja" zawiera tylko 1 lub 0. Ma ona index ale nie jest on
> wykorzystywany w zapytaniu.

Pewnie masz za dużo promocji. ;)

Istotne jest ile % rekordów spełnia warunek z zapytanie. Jeśli niewielki, to
załóż index na obydwie kolumny.
Poza tym order by rand() jest zasobożerny i limit mu nie pomaga. Pomyśl nad
wcześniejszym przygotowaniem paczek z promocjami do serwowania na stronę.

--
P.M.




przemo - 21-11-2006 00:02

 
>> Kolumna "promocja" zawiera tylko 1 lub 0. Ma ona index ale nie jest on
>> wykorzystywany w zapytaniu.
>
> Pewnie masz za dużo promocji. ;)
Około 100 :-)
Z 11000 rekordów ogółem w tabeli

> Istotne jest ile % rekordów spełnia warunek z zapytanie. Jeśli
> niewielki, to załóż index na obydwie kolumny.
Indeksy są, ale MySQL (w wersja_1) z nich nie korzysta
EXPLAIN pokazuje nawet promocja_idndex jako possible_key ale key jest NULL,
nawet przy USE INDEX czy FORCE INDEX

> Poza tym order by rand() jest zasobożerny i limit mu nie pomaga. Pomyśl
> nad wcześniejszym przygotowaniem paczek z promocjami do serwowania na
> stronę.

pomyślę o tym
dzięki :-)





Paweł Matejski - 21-11-2006 00:02

  przemo wrote:
>
>>> Kolumna "promocja" zawiera tylko 1 lub 0. Ma ona index ale nie jest
>>> on wykorzystywany w zapytaniu.
>>
>> Pewnie masz za dużo promocji. ;)
> Około 100 :-)
> Z 11000 rekordów ogółem w tabeli

E, to niedużo - kombinuj z indeksami.

>> Istotne jest ile % rekordów spełnia warunek z zapytanie. Jeśli
>> niewielki, to załóż index na obydwie kolumny.
> Indeksy są, ale MySQL (w wersja_1) z nich nie korzysta

Jaka wersja?!

> EXPLAIN pokazuje nawet promocja_idndex jako possible_key ale key jest NULL,
> nawet przy USE INDEX czy FORCE INDEX

A z dwukolumnowego też nie chce korzystać?

--
P.M.




przemo - 21-11-2006 00:02

 
>> Indeksy są, ale MySQL (w wersja_1) z nich nie korzysta
>
> Jaka wersja?!

wersja pierwsza zapytania :-)
podałem 2 wersje "przed" i "po" mojej pseudo optymalizacji
za niejasności przepraszam
  • 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
  • adwokat.keep.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