Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Indexy
lubski
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.11.2007

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


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 = ''
Go to the top of the page
+Quote Post
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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).

Ten post edytował Zyx 21.01.2009, 15:49:44
Go to the top of the page
+Quote Post
lubski
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.11.2007

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


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 ?
Go to the top of the page
+Quote Post
Zyx
post
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.

Ten post edytował Zyx 21.01.2009, 18:10:21
Go to the top of the page
+Quote Post

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: 24.08.2025 - 07:43