Zahaczyłem o ten blog http://blog.mwojcik.pl/2009/07/06/mysql-indeksy-i-klucze-obce/
- Czy to prawda ? Korzystam z MySQL 5.5
CREATE INDEX name_surname ON players (name, surname)
Indeks wykorzystany będzie, gdy będziemy przeszukiwać dane po polu name, bądź jednocześnie po polu name jak i surname – nie będzie tak, gdy wyszukujemy dane tylko przez sprawdzenie nazwiska – to zapytanie nie wykorzysta indeksu:
- Druga sprawa: mam tabelę przechowującą wartości liczbowe pewnych pomiarów w pewnych lokalizacjach, w niej 1mln rekordów. Składa się z 4 kluczy głównych (ID_Lokalizacji, ID_Pomiaru, Id_Dnia, Godzina) oraz kolumna Wartosc typu Decimal.
Musiałem dołożyć do tej tabeli dwa dodatkowe pola typu Decimal(15,4) oraz jedno TinyInt i DateTime. I co się okazało ? Otóż pobierając z kolumny Wartosc, czas zapytań się zwiększył kilkukrotnie !. Dla mnie jest to dziwne - fakt że szersza krotka, ale selektuje wyłącznie po kluczach głównych, więc czas wykonania powinien być tylko minimalnie większy. Gdy usunę te dodatkowe pola, zapytania się wykonują szybko (więc to jest na 100% przyczyna).
Nałożyłem Indeks na pole Wartosc, ale i tak wolniej to działa, niż przed dołożeniem tych 4 kolumn o ktorych pisalem. Nie rozumiem, czemu spowodowało to takie zwolnienie (około 4-krotne).