![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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:
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 10:29 |