lubski
21.01.2009, 14:55:12
Mam pytanko co do indexów. Większość tutoriali i dokumentacji nie wyjaśnia jednego przypadku.
1 Sytuacja. Index kompozytowy.
Mamy tabelkę z kolumnami id,login, pass.
Tworzymy index. PRIMARY id i index na dwie kolumny login,pass.
Wiem że będzie wyszukiwanie po indexach gdy zapytamy.
.... WHERE login = '' AND pass = ''
.... WHERE login = ''
.... WHERE pass = '' Tu nie zadziała index.
2. Ale czy w tej sytuacji będą działać indexy ?
kolumny : id,name,login,pass,pesel,nip ....
Na każda kolumnę jest osobny index. Oczywiście nie na wszystkie. Mp na id,login i pesel (czyli mamy trzy indexy)
Gdy zapytam. Będą działać indexy ?. Czy już dane będą zaciągane z tabeli ?
... WHERE id = '' AND pesel = ''
... WHERE id = '' AND login = '' AND pesel = ''
Jeśli wybierasz coś według klucza głównego, to nie ma sensu jeszcze indeksów angażować, gdyż klucz główny ma za zadanie jednoznacznie określać wiersze. Zresztą, wystarczy zrobić EXPLAIN SELECT,by się o tym przekonać.
PS. Pisze się "INDEKSY", a nie "indexy" (przypominam, że jesteśmy w Polsce).
lubski
21.01.2009, 16:17:29
Cytat
Jeśli wybierasz coś według klucza głównego
No to jest oczywiste. Ale dałem taki przykład. W tej tabeli nie zawsze będą zapytania po kluczu głównym. Możliwe opcje to 3-4 kolumny. I to mnie ciekawi jak będą się zachowywać indeksy jeśli każdy będzie indeks to osobna kolumna a nie razem wszystkie jako indeks kompozycyjny. Czy mysql będzie brał je po uwagę czy może będzie brał dane z kolumn ?
Weźmie wtedy pod uwagę tylko jeden z indeksów. Można to bardzo prosto wytłumaczyć: baza korzysta z indeksu 1, odnajduje za jego pomocą bardzo szybko grupę wierszy pasującą do jednego z kryteriów. Chce zastosować drugie kryterium, jest tam indeks, ale ułożony globalnie, więc zawarte w nim informacje nie na wiele się zdadzą.
Bardzo to fajnie widać, jak zrobisz sobie tabelkę z 3-ma polami (id, a1, a2) i zrobisz indeksy: a1, a2, a1+a2. Jeśli spróbujesz coś wybrać według jednocześnie a1 i a2, to silnik użyje indeksu a1+a2, gdy zaś tego indeksu nie będzie, wybierze jeden z indeksów a1 lub a2.
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.