Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> czy widok moze spowolnic zapytanie?
misty
post
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

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


Czesc, mam takie pytani: mam tabele w ktorej jest dosc sporo danych. Mam przygotowany widok ktory mi z niej wyciaga jakies dam dane, max (czas), group by 2 pola oraz 1 join tam jest. Widok wyglada mniej wiecej tak:

  1. CREATE OR REPLACE VIEW test_v AS SELECT max(start_date), field_1, field_2, field_3, field_4
  2. FROM test_table_1
  3. LEFT JOIN test_table_2 ON test_table_2.id = test_table_1.test_table_2_id
  4. WHERE test_table_2_id IN (1,2,3,4,5,6,7,8,9,10)
  5. GROUP BY field_1, field_2


Zastanawiam sie, co w tym przypadku bedzie szybsze - czy za kazdym razem robienie select'a z tej tabeli (czyli parta kodu zaczynajaca sie od SELECT max..)
czy tez utowrzenie takiego widoku i robienie z niego selecta. Czy ten widok nie zabiera mi jakiegos cennego czasu? Lub czy moge sprawdzic (jak?) rzeczywisty czas wykonania zapytan? Bo z tego co sie orientuje to mysql cachuje zapytania, wiec wyniki ktore dostaje nie sa miarodajne.

Bede wdzieczna za wskazowki,
pzdr,
misty
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
alegorn
post
Post #2





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

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


hmm.
mysle ze kluczem do odpowiedzi jest odpowiedz na pytanie, co chcesz zrobic z wynikami?
moze w podpunktach:

aktualnosc danych
ilosc odwolan do tych samych danych
dalsze obrabianie wynikow

jesli bedziesz znac odpowiedz na te kluczowe pytania - latwiej bedzie dac odpowiedz.

scenariusz 1
musze miec dostep do aktualnych danych, wyniki nie podlegaja dalszej obróbce po stronie mysql
odpowiedz: zapytanie, lub ewentualnie procedura.
procedure trzeba umiejetnie napisac (zreszta procedury to osobna kwestia)
byc moze, lepiej bedzie ci rozbic skomplikowane zapytanie na kilka mniejszych? bedzie o wiele wydajniej (kwestia wielowatkowosci mysql)

scenariusz 2
musze miec aktualne dane, musze obrabiac dalsze dane
odpowiedz: widok
tracisz odrobine na wydajnosci, ale zyskujesz latwy dostep do aktualnych danych

scenariusz 3
chce miec szybki wydajny i wygodny dostep do danych. dane moga byc aktualizowane np. co 30min.
odpowiedz:
tabele tymczasowe, lub tabele generowane
tabele tymczasowa - zyskujesz najszybszy dostep do danych (wypelniane sa RAZ NA SESJE), klopotem jest odpowiednie zainicjowanie takiej tabeli, ale to do zrobienia.
tabele generowane(nie znam dobrej nazwy, chodzi o tabele z zrzutem danych) - cos a'la tabela tymczasowa, tyle ze nie generujesz tego per sesja - tylko per czas.
musisz tutaj wykonac dodatkowy skrypt ktory co okreslony interwal czasu bedzie wypelnial dane (oczywiscie mija sie z celem jesli musisz miec aktualne dane np co 5 min. to dziala najlepiej raz na kilkadziesiat minut - raz na pare godzin/raz na dzien) skrypt odpalasz albo jako events, albo z crona.

oczywiscie to schematy rozwiazan, to zalezy tak naprawde co potrzebujesz - i co potrafisz.

j.


ps do testowania zapytan uzywal SQL_NO_CACHE w zapytaniu, nie bedziesz wtedy kozystac z qc, a tak naprawde explain prawde ci powie

Ten post edytował alegorn 5.03.2012, 16:09:46
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 9.10.2025 - 13:04