Witam. Dla celów posłuży nam tabela kalendarza, taki bardziej rozbudowany np jakiś firmowy.
Rok {K} | DzienID {K} | TydzienID | Data
2010 1 1 2010-01-01
2010 2 2 2010-01-09
2010 3 2 2010-01-10
2010 4 2 2010-01-11
2010 5 3 2010-01-10
2010 6 3 2010-01-15
2010 7 4 2010-01-20
2011 1 1 2011-01-01
2011 1 1 2011-01-01
2012 1 1 2012-01-01
2013 1 1 2013-01-01
Kluczem jest tutaj Rok i ID dnia.
Przykładowo chce wyswietlić dane za 1 tydzień roku 2010.
Co powinno być najpierw ?
1. SELECT ... WHERE Rok=2010 AND TID=1
2. SELECT ... WHERE TID=1 AND Rok=2010
W pierwszym wypadku WYDAJE mi się, że wyselektuje do jakiegoś tempa 7rekordów, a potem z niego 1 rekod.
W drugim wypadku wyselektuje 5 rekordow w pierwszej czesci warunku a potem z niego 1.
Tylko ze tu jest haczyk: struktura jest typu BTREE, nie wiem dokladnie jak to jest zrobione, ale na pewno wezly jakos sa pogrupowane wg kluczy głównych. Wiec prawdopodbnie pierwszy sposob selekta bedzie lepszy.... ?!
Generalnie jak pisalem zapytania to stosowalem sie zasady, ze na poczatku warunki kluczowe, od tych 'najgrubszych' a na koncu warunki niekluczowe. Czy tak bedzie zawsze najoptymalniej ?
- Oraz takie poboczne pytanie: czy majac Rok i DzienID, da sie wyselektowac wszystkie dane z tygodnia w ktorym jest DzienID ? (Nie uzywajac funkcji dat, tylko na podstawie pola 'TydzienID'). Pewnie pozostaje podzapytanie ? (Selekt w selekcie).