![]() |
![]() |
![]()
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:
jest wykorzystwany index(table access->by index rowid) natomiast dla zapytań:
oraz
optymalizator nie używa indexu z czego to wynika? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Index to posortowany zbior danych wiec jesli znasz pierwsza litere to algorytmem btree wyszukuje dopasowan i podobnie z kolejnymi literami. Dla LIKE '% tego nie moze uczynic wiec przeszukuje wszyskie wartosci. Jak takie cos przyspieszyc - niestety nie wiem
![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 15.04.2004 Skąd: w-wa Ostrzeżenie: (0%) ![]() ![]() |
a jeśli chodzi o to OR ? masz może jakiś pomysł czemu nie korzysta z indeksu w tym przypadku?
z tego co zauważyłem, czasem OR zamienia na UNION ALL i wtedy już korzysta z indeksu.. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 1.12.2003 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Optymalizator nie skorzysta z indeksu jeśli użyłeś OR z wykorzystaniem pól zawartych w tych indeksie, to jedna z właściowości CBO. Like'i ktorych uzywasz w zapytaniu takze nie pomagaja w poprawnym wykorzystaniu indeksu. Sprobuj dodac wskazowke do optymalizatora /*+ FIRST_ROWS INDEX(nazwa_tabeli nazwa_indeksu) */, sprawdz ja k sie zachowa i postnij tutaj explain plan.
-------------------- MySQL said:
You have an error in your SQL syntax near ' `sygnatura` VARCHAR, NOT NULL |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 15.04.2004 Skąd: w-wa Ostrzeżenie: (0%) ![]() ![]() |
Synaps: stwierdzenie faktu że nie dziala korzystanie z indeksu nic nie wyjaśnia. Widzę, ze tak jest, bo mam przed sobą explain plan. Ja zadałem pytanie dlaczego
![]() Cytat Dla LIKE '%kowal tego nie moze uczynic wiec przeszukuje wszyskie wartosciJak takie cos przyspieszyc - niestety nie wiem A może spróbować wymusić odwrócony INDEX? jakoś może:
wkońcu po coś są te reverese-indexy ![]() jeszcze nie miałem chwili, żeby to sprawdzić, dam znać jaki efekt po południu Ten post edytował tmk 4.03.2006, 10:09:42 |
|
|
![]()
Post
#6
|
|
![]() 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 -------------------- MySQL said:
You have an error in your SQL syntax near ' `sygnatura` VARCHAR, NOT NULL |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 0 Dołączył: 15.04.2004 Skąd: w-wa Ostrzeżenie: (0%) ![]() ![]() |
znalazłęm, że w Oracle 10g jest mechanizm Oracle Text przeznaczony właśnie do wyszukiwania ciągów (rozwiązanie '%coś%')
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:41 |