Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Porównywanie wielu dat w jednym zapytaniu - problem z wydajnością
ppendel
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 5.12.2005

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


Witam,

Mam do utworzenia zapytanie w którym muszę sprawdzić trzy daty pochodzące z dwóch tabel, czy znajdują się w jakimś przedziale.

Problem polega na tym, że warunkiem jest że co najmniej jedna z tych dat ma być zawarta w określonym zakresie, czyli:

(tabela1.date1 BETWEEN '2011-08-01' AND '2011-08-31') OR (tabela2.date2 BETWEEN '2011-08-01' AND '2011-08-31') OR (tabela2.date3 BETWEEN '2011-08-01' AND '2011-08-31').

Przy zapytaniu z OR czas wykonania zapytania oscyluje w okolicach 15s, natomiast przy sprawdzaniu jednej daty, bądź wszystkich z warunkiem AND czas wykonania zapytania wynosi 0,2-0,5s.

Czy ktoś wie, czy jest jakiś inny/efektywniejszy sposób na sprawdzenie tego warunku?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat
trzy daty pochodzące z dwóch tabel


Bo pewnie najpierw pobierasz całe tabele, a potem rzeźbisz w nich łerem, można zoptymalizować:

1. Należy dodać podzapytanie do FROM
2. Warunki do JOIN, które od razu pobiorą potrzebne rekordy. Jeśli dołączamy też jakąś tabelę tylko po to, by w niej poszukać to także jest to bez sensu (joina należy używać tylko po to, by pobrać jakieś dane i wyświetlić je na stronie, gdy potrzebujemy np. nazwy województwa a nie szukania po nazwie województwa).
3. Należy użyć podzapytania w WHERE.

Zapytanie mogłoby wyglądać np. tak:
  1. SELECT * FROM (
  2. SELECT * FROM tabela WHERE pole='warunek'
  3. ) AS tabela
  4. JOIN tabela2 ON tabela2.id = tabela.jakies_id AND pole2='warunek2'
  5. WHERE pole3 IN (SELECT ID FROM tabela3 WHERE pole3='warunek3')


I nie należy dołączać joinem dużych tabel, bo to strasznie spowalnia, lepiej już użyć dwóch zapytań.

I pamiętaj o indeksach na pola, po których szukasz lub łączysz.
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: 13.10.2025 - 10:29