Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> czemu optymalizator nie używa indeksu
tmk
post
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 15.04.2004
Skąd: w-wa

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


w tabeli prac mam: id_prac, nazwisko, id_zesp. Założyłem index na nazwisko(zwykły index ).
proszę o pomoc , ponieważ:
dla zapytania:
  1. SELECT*
  2. FROM prac
  3. WHERE nazwisko LIKE 'kowal%'

jest wykorzystwany index(table access->by index rowid)
natomiast dla zapytań:
  1. SELECT*
  2. FROM prac
  3. WHERE nazwisko LIKE '%kowal'

oraz
  1. SELECT*
  2. FROM prac
  3. WHERE nazwisko LIKE 'kowal%' OR nazwisko LIKE 'olek%'

optymalizator nie używa indexu

z czego to wynika?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Synaps
post
Post #2





Grupa: Zarejestrowani
Postów: 103
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Gdynia

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


W przypadku zapytania z OR podejzewam ze indeks nie jest wykorzystany dlatego iz koszt full scana tabeli jest mniejszy niz dwa skany indeksu nawet po rowid. Zapewne też działa tutaj RBO a nie CBO, jak dodasz wskazówke /*+FIRST_ROWS*/ prawdopodobnie opt skorzysta z indeksu, ale kosz wykonania będzie wiekszy niż bez niego.( zakładam też że masz wygenerowane statystki dla tabeli oraz indeksu) Oczywiście to tylko przypuszczenia bo nie wkleiłeś żadnego explain planu.



btw: co do mojego stwierdzenia dot. OR w poscie powyżej to moja pomyłka, wydawało mi się że jako drugi warunek daleś '%wartosc' co nie pozwala korzystac z indeksu ze wzgledu na niemozliwosc okreslenia przedzialu poszukiwania ( dokladnie poczatku ).

Ten post edytował Synaps 6.03.2006, 15:16:31
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: 8.10.2025 - 20:44