Pomoc w optymalizacji zapytań |
Pomoc w optymalizacji zapytań |
5.06.2008, 06:21:43
Post
#1
|
|
Grupa: Zarejestrowani Postów: 422 Pomógł: 0 Dołączył: 14.12.2005 Skąd: Wałbrzych Ostrzeżenie: (0%) |
Otóż piszę pewną aplikację opartą o ZF. Miałem problemy z wydajnością, więc podpiąłem Profilera i okazało się, że mam problem z następującymi zapytaniami:
Query length: 0.000461101531982 Query:
Query length: 0.000448942184448 Query:
Query length: 1.26994109154 Query:
Te dwa raz działają dobrze, a raz źle. A ostatnie działa zawsze źle. Pierwsze dwa służą do pobrania ID poprzedniego i następnego rekordu, a ostatni służy do pobrania losowych rekordów. Ja nie wyobrażam sobie napisania tego w inny sposób, co Wy o tym sądzicie? Pozdrawiam! Ten post edytował Balon 5.06.2008, 06:21:55 -------------------- Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki |
|
|
5.06.2008, 06:39:00
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) |
1. Zawsze podawaj strukture tabeli [koniecznie z kluczami]
2. W pierwszych 2ch przypadkach szukasz pierwszego rekordu i porownujesz jego ID [zakladam ze MASZ na nim indeks, czy tez PK] - wiec to bedzie szybkie bo skorzysta z indeksu do znalezienia odpowiedniego ID i zapewne tez do posortowania rekordow 3. Co robi ostatnie zapytanie? Wyciaga wszystkie rekordy [oprocz jednego] i je sortuje [order by RAND()], i nie skorzysta z indeksow [obejrzyj sobie wynik EXPLAIN] - chyba widzisz roznice Tu masz ladny art. o tym jak wybierac losowy rekord: http://akinas.com/pages/en/blog/mysql_random_row/ -------------------- Nie lubię jednorożców.
|
|
|
6.06.2008, 13:38:08
Post
#3
|
|
Grupa: Zarejestrowani Postów: 422 Pomógł: 0 Dołączył: 14.12.2005 Skąd: Wałbrzych Ostrzeżenie: (0%) |
Tak, fakt. Rozumiem czemu to tak działa w 3. Co do przykładów, do których link podałeś, jak mam zrobić, żebym mógł pobierać wiele losowych rekordów? Bo to co jest tam pokazane tyczy się jedynie jednego rekordu. A ja potrzebuje pobrać 5 różnych.
Dziękuje za odpowiedź, pozdrawiam! -------------------- Postura wielka i morda wredna, jestem Balon, kozak z osiedla !
bzdury.pl - Królestwo rozrywki |
|
|
9.06.2008, 09:13:50
Post
#4
|
|
Grupa: Zarejestrowani Postów: 793 Pomógł: 32 Dołączył: 23.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) |
Możesz wybrać grupę np. 20 rekordów, wybierając przedział losowo (jedynie początek wystarczy losowo wybrać), a z tej grupy po rand() te 5, co prawda to spowoduje że będą występować tylko blisko siebie dane, ale da to złudzenie losowości, jeszcze można co najwyżej wykorzystać indeksowane kolumny do różnych sortowań.
-------------------- Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami. |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 14:00 |