Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Stronicowanie miliona rekordów
deejay4net
post 29.05.2012, 22:25:04
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

Ostrzeżenie: (0%)
-----


Witam, mam taki problem, szukam skutecznego rozwiązania na stronicowanie miliona rekordów, poza samym strocniowaniem czasami występują warunki lub sortowanie względem pola. Klasa przeze mnie napisana do tej pory opierała się na liczeniu przed zapytaniem ilości wszystkich rekordów poprzez COUNT(1) FROM Dalczy ciąg zapytania...
Lecz przy milionie rekordów wydaje mi się to w ogóle nie optymalne bo samo wejście z pozycji skryptu w listowanie rekordów po 20 np. trwa długo mimo iż tylko ja to przeglądam i z bazy nie korzysta nikt inny. Jak Wy rozwiązujecie stronicowanie takiej ilości rekordów? Mam nadzieje że dobry dział, dawno tutaj nie zaglądałem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post 30.05.2012, 09:47:50
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Normalne stronicowanie jest niezależne od liczby rekordów. Czy ich jest 100 czy milion to dla stronicowania nie ma różnicy - przecież wyświetlasz na raz powiedzmy 20 rekordów. Skoro ci muli to masz nieoptymalne zapytania, złe indeksy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
deejay4net
post 30.05.2012, 11:36:46
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

Ostrzeżenie: (0%)
-----


Przyjrze się dokładnie temu chociaż raczej indeksy i zapytania są poprawne
Go to the top of the page
+Quote Post
nospor
post 30.05.2012, 11:54:39
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) Pokaż swój kod
2) Zrób EXPLAIN na zapytaniach i pokaż co zwraca


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
bpskiba
post 31.05.2012, 15:53:34
Post #5





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Dodam...


Przy stronicowaniu najczęściej serwer wykonuje sortowanie, więc istotna jest konfiguracja serwera i rozmiary buforów biorących w tym udział. Milion rekordów, to nie jest szczególnie dużo, ale domyślna konfiguracja może nie wystarczyć.
Jak wygląda sortowanie w zapytaniu?questionmark.gif
Go to the top of the page
+Quote Post
alegorn
post 1.06.2012, 12:14:38
Post #6





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


explain!

sortowanie wzgledem jakiejs kolumny? najprawdopodobniej : wymuszasz uzycie tabel tymczasowych, ktore przekraczaja rozmiar bufora, i idzie zapis na dysk.

jaki silnik? myisam? innodb? kazda z nich zachowuje sie inaczej.... wiec nie dam ci bardziej precyzyjne odpowiedzi...


j.
Go to the top of the page
+Quote Post
deejay4net
post 5.06.2012, 22:22:31
Post #7





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 11.06.2007

Ostrzeżenie: (0%)
-----


Sorry, że tak późno. Sinik myisam, ustawienia domyślne, Ogólnie nie dotyczy to problemu konkretnego skryptu, czy zapytania. Jest to problem ogólny. Jak to optymalnie zrobić i ustawić aby milion czy np 10 milionów rekordów nie stanowiły problemu. Możliwe że robie złe indeksy bo to chyba rozdział który trochę przegapiłem jeśli chodzi MySQL, a nigdzie nie mogę znaleźć dobrego objaśienia gdzie, kiedy i jak najlepiej je stosować...
Go to the top of the page
+Quote Post
bpskiba
post 6.06.2012, 12:52:21
Post #8





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Cytat(deejay4net @ 5.06.2012, 23:22:31 ) *
Sorry, że tak późno. Sinik myisam, ustawienia domyślne, Ogólnie nie dotyczy to problemu konkretnego skryptu, czy zapytania. Jest to problem ogólny. Jak to optymalnie zrobić i ustawić aby milion czy np 10 milionów rekordów nie stanowiły problemu. Możliwe że robie złe indeksy bo to chyba rozdział który trochę przegapiłem jeśli chodzi MySQL, a nigdzie nie mogę znaleźć dobrego objaśienia gdzie, kiedy i jak najlepiej je stosować...


Indeksowanie jest kluczowym elementem jeśli chodzi o wydajność zapytań. Nie ma na to jednego wzoru czy szablonu i do każdego serwisu należy podchodzić indywidualnie. Nie masz szans na pomoc poprzez forum. Polecam książki np taką
http://helion.pl/ksiazki/wysoko-wydajne-my...ling,wydmsq.htm

Przypadek, gdy kilkaset tysięcy rekordów stronicuje się szybko, a po przekroczeniu jakiegoś progu następuje lawinowy spadek wydajności sugeruje jednak problem z konfiguracją serwera:
Myślę, że najszybciej uzyskasz wskazówki i poprawę wydajności odpalając jakiś skrypt do optymalizacji

https://github.com/rackerhacker/MySQLTuner-...r/mysqltuner.pl

http://genomewiki.ucsc.edu/index.php/Tuning-primer.sh
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:08