![]() |
![]() ![]() |
![]() |
![]()
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 = '' |
|
|
![]()
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 |
|
|
![]()
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 ? |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 07:43 |