![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Witam
Struktura tabel:
Zapytanie:
Niestety w tabeli status ilość rekordów wynosi 500 tysięcy do miliona może nawet kilku w ekstremalnych przypadkach. Całe zapytanie wykonuje się około 2,5 sekundy przy 400k rekordów. Wąskimi gardłami w tym zapytaniu są te dwa pod zapytania jednak niezbyt mam pojęcie jak się ich pozbyć i zastąpić czymś bardziej optymalnym. Z góry dziękuje za pomoc. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 420 Pomógł: 44 Dołączył: 22.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Bo muszę pobrać najmłodszy rekord.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Masz podzapytania skorelowane, co zawsze jest wolne.
http://dev.mysql.com/doc/refman/5.1/en/cor...subqueries.html Spróbuj to przepisać tak, żeby tego uniknąć (w większości przypadków da się) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Użyje chyba nadmiarowych danych aby zwiększyć wydajność tego zapytania.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 165 Pomógł: 5 Dołączył: 10.07.2008 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Masz podzapytania skorelowane, co zawsze jest wolne. http://dev.mysql.com/doc/refman/5.1/en/cor...subqueries.html Spróbuj to przepisać tak, żeby tego uniknąć (w większości przypadków da się) Masz może jakieś linki na ten temat? Bo też często używam zapytań skorelowanych (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Manual rozdział 7.2.
http://dev.mysql.com/doc/refman/5.1/en/query-speed.html Ten post edytował Mchl 18.06.2010, 18:33:47 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
lepiej zamiast NOW() wrzucic statyczna date z php, NOW jest niedeterministyczne i nie bardzo mysql potrafi je cachowac
jesli wrzucisz zamiast tego jakas stala, to wprawdzie zapytanie za pierwszym razem wykona sie 2.5 sec, ale za drugim juz 0.1 (IMG:style_emoticons/default/winksmiley.jpg) wydaje mi sie ze ten count nie musi byc w podzapytaniu, chyba wystarczy zwykle grupowanie po p.id najmniejsze statusy drugiego podzapytania przygotowalbym sobie wczesniej w tabeli tymczasowej i sklejal to inner zawsze gdy robilem dane nadmiarowe to pozniej zalowalem (IMG:style_emoticons/default/smile.gif) Ten post edytował yevaud 19.06.2010, 00:13:13 |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
A może nauczysz się formatować zapytanie tak żeby DAŁO JE SIĘ CZYTAĆ?
Po drugie nie masz założonych żadnych indeksów więc najwyższa pora o nich pomyśleć. Uprzedzam pytania "na co założyć?". Nie jesteśmy w stanie DOBRZE tego określić ponieważ do analizy potrzebne jest znacznie więcej niż twoje jedno zapytanie. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
nie wiem dlaczego zalozylem milczaco, ze indeksy pozakladane sa oddzielnie (IMG:style_emoticons/default/smile.gif)
polecam prosty wpis o optymalizacji do przetrawienia http://net.tutsplus.com/tutorials/other/to...best-practices/ |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Poradziłem sobie już z nadmiarowymi danymi. Jeśli ktoś otworzy oczy to zauważy iż indexy są założone, bez nich zapytanie trwało by wieki. Pozdrawiam i dziękuje za pomoc. Temat do zamknięcia. (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
Pytanie, czy to najlepsze indeksy jakie się da zrobić (IMG:style_emoticons/default/winksmiley.jpg)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.09.2025 - 15:55 |