Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Indexy
Forum PHP.pl > Forum > Bazy danych
lubski
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 = ''
Zyx
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
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 ?
Zyx
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.