Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania
Forum PHP.pl > Forum > Bazy danych > Oracle
tmk
Witam,

w bazie mam okolo 10000 rekordów, 3 pola tabeli: id, kto, zakonczyl
Jest to baza osób z oznaczeniem, czy mają aktywną usługę, czy już nie. Osoby, które mają usługę aktywną oznaczam poprzez przypisanie wartości NULL do zakonczyl, a osoby które zakończyły, poprzez wpisanie daty do zakonczyl

Teraz gdybym chciał wypisać tych, którzy mają usługę aktywną użyłbym zapytania:
  1. SELECT*
  2. FROM tabela
  3. WHERE zakonczył IS NULL;


Wiadomo, że wartości NULL nie są indeksowane, czyli założenie indeksu na zakonczyl nic nie da. Czy da się jakoś przyspieszyć to zapytanie? żeby obronić sie przez FULL Table Scan?
ergo
a nie mozesz sprawdzic po prostu czy data nie jest mniejsza od jakiejs wartosci ?
albo czy nie lepiej by bylo tam wpisac data=0 ?
tmk
Poszukuje rozwiązania dla własnie tak zbudowanej tabeli, jak to przedstawiłem.
Załóżmy, że mam to narzucone z góry i zadaniem jest zoptymalizowanie zapytania dla Takiej tabelki.
ergo
  1. SELECT*
  2. FROM tabela
  3. WHERE zakonczył < najmniejsza DATA jaka masz;

powinno chyba starczyc ?
tmk
ale warunek dla daty:
  1. WHERE zakonczyl<data
nie da w wyniku rekordów, które mają wartość NULL w tej kolumnie...jedynie te, które mają datę wpisaną, różną od NULL i mniejszą od data. A właśnie nie o to mi chodzi..
ergo
no i co z tego ? przeciez to co dostaniesz w wyniku bedzie takie samo , i do tego uzyje ci indeksow.
tmk
Cytat
no i co z tego ?
ja chcę znaleźć tych, którzy mają wartość NULL, a podana przez Ciebie metoda tego nie rozwiązuje - pominie tych, którzy mają NULL
Chyba nie do końca zrozumiałeś o co chodzi
ergo
znajdzie, przeciez powinno ich potraktowac jakby mieli 0 ?
tmk
No tym się właśnie rózni Null od zera .... , że nie znajdzie.
Null = nic, a nie zero.
To samo można sprawdzić na przykład korzystając z count(colX) - zlekceważy wiersze, które mają w colX NULL, ale te wiersze, które mają w colX 0, zliczy.
orson
witam ...

załóż indeks wspólny dla id i zakończył

pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.