[php][mysql] kolejkowanie do wyswietlania zapytań, po wykonaniu jednego zapytanie zaczyna robić drugie |
[php][mysql] kolejkowanie do wyswietlania zapytań, po wykonaniu jednego zapytanie zaczyna robić drugie |
23.01.2018, 17:17:14
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 29.05.2016 Ostrzeżenie: (0%) |
witam,
potrzebuje pomocy, ogólnie plik wygląda tak:
i jest tak, że strasznie dużo czasu potrzeba na wczytanie tych wszystkich danych. W tym kodzie potrzebuje pomocy z tym żeby te dane wczytywany się pojedynczo ale dynamicznie, czyli na początku pokazuje się jeden wynik, zaraz kolejny i tak dalej aż załaduje się cała tabela. Czy jest ktoś wstanie pomóc? Ten post edytował orzeleagle 23.01.2018, 17:19:00 |
|
|
23.01.2018, 17:20:24
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
A nie można pobrać raz wszystkiego w przedziale OD i DO?
-------------------- |
|
|
23.01.2018, 17:23:37
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Masz pozakładane indeksy na rok_wydania oraz id_tytulu?
I czy na pewno dobrze liczysz odchylenie? Jakie odchylenie otrzymujesz obliczając je z jednej wartości? -------------------- |
|
|
23.01.2018, 17:37:06
Post
#4
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 29.05.2016 Ostrzeżenie: (0%) |
zapytanie są dobrze, tzn tak mają być, chodzi mi jedynie o to żeby nie wczytywany się wszystkie na raz tylko pojedynczo i pojedynczo gdy się załadują wyświetlały.
|
|
|
23.01.2018, 17:53:07
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 440 Pomógł: 6290 Dołączył: 27.12.2004 |
A moze zamiast wymyslac kosmiczne rozwiazania, warto troche przymyslec te zapytania czy oby na pewno sa optymalne? Bo to, ze zwracaja co chcesz, nie znaczy ze sa poprawne.
Moze zacznij od EXPLAIN -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
23.01.2018, 21:22:16
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) |
1. Musisz mieć 3 indeksy (to znacznie przyspieszy):
- tytul.id_autora - tab_lacz.id_autora - tytul.rok_wydania 2. Użyj JOIN - to równiez powinno przyspieszyć. 3. Bierz wszystko na raz - lepiej jest wykonać raz, a nie 12 razy. Zapytanie powinno wyglądać mniej więcej tak:
|
|
|
25.01.2018, 13:44:16
Post
#7
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 29.05.2016 Ostrzeżenie: (0%) |
1. Musisz mieć 3 indeksy (to znacznie przyspieszy): - tytul.id_autora - tab_lacz.id_autora - tytul.rok_wydania 2. Użyj JOIN - to równiez powinno przyspieszyć. 3. Bierz wszystko na raz - lepiej jest wykonać raz, a nie 12 razy. Zapytanie powinno wyglądać mniej więcej tak:
to jest moje index.php http://wklej.org/id/3352840/txt/ a w wyswietleniu wyglada tak: https://ibb.co/dbnCww mógłbyś mi to tak przerobić jak napisałeś w poście albo zacząć trochę żebym mógł analogicznie zrobić bump |
|
|
25.01.2018, 13:53:37
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 440 Pomógł: 6290 Dołączył: 27.12.2004 |
Cytat bump Moze zamiast takich bump to odnioslbys sie do wszystkich odpowiedzi, ktore dostales? Ot z tak zwyklej przyzwoitosci, ze ktos poswiecil swoj czas by ci pomoc choc nie musial.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
3.02.2018, 18:08:02
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) |
Podłącze się, bo może komuś się przyda:
- coś takiego nie powinno być w ogóle dopuszczalne w mysql, to tworzy iloczyn tabel, czyli jak masz w jednej 100 rekordów a w drugiej 1000 to w wyniku będzie 100 000 rekordów. Kolejna rzecz: używanie zapytań SELECT bez klauzuli LIMIT. Jest to złe, ponieważ zawsze wybieramy całą tabelę co natychmiast zabije performance kiedy tylko liczba danych wzrośnie. Gdy używa się ORMa (np. Doctrine) można sobie ustawić to automatycznie (np. jeśli nie ma klauzuli limit to z automatu jest 999). Następna sprawa: jeśli potrzebujemy dokładnych danych typu liczba rekordów, rozbudowanych raportów etc. to nigdy nie odpytujemy bazy z poziomu aplikacji PHP, tylko używamy specjalnego narzędzia do kolejkowania zadań (np. Rabita), silnika do danych (np. Lucyny) i aplikacji/skryptów ładujących dane z bazy. Liczbę zapytań wtedy ustawiamy stosownie do naszych możliwości i jest to kompletnie niezależne od aplikacji PHP i liczby użytkowników na stronie, w aplikacji produkcyjnej odświeżenie strony nie powinno generować zapytań do baz danych. |
|
|
3.02.2018, 18:55:22
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Podłącze się, bo może komuś się przyda: - coś takiego nie powinno być w ogóle dopuszczalne w mysql, to tworzy iloczyn tabel, czyli jak masz w jednej 100 rekordów a w drugiej 1000 to w wyniku będzie 100 000 rekordów. W teorii. W praktyce CROSS JOIN + WHERE zostanie zoptymalizowany i wykonany jak INNER JOIN. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 06:48 |