- używaj pól o jak najmiejszym rozmiarze
- zmniejszenie rekordu redukuje ilość operacji dyskowych. Jeżeli przechowujesz hasło w postaci hasza md5, użyj pola char(32) a nie varchar(100)
- deklaruj kolumny jako NOT NULL
- zmniejszysz rozmiar rekordu
- dla tabel MyISAM używaj rekordu o stałej długości
- patrz: Prędkość czy miejsce
- podstawowy indeks tabeli powinien być tak mały, jak to możliwe
- przyspieszy to przeszukiwanie i tworzenie pliku indeksu
- twórz indeksy których naprawdę potrzebujesz
- tworzenie i odczytywanie indeksu też zajmuje czas. Indeksuj te kolumny, których używasz w części WHERE, ORDER BY lub GROUP BY zapytania. Nie musisz indeksować kolumn, których używasz tylko w części SELECT
- pierwsza kolumna złożonego klucza powinna być kolumną najczęściej używaną
- przyspieszy to przeszukiwanie indeksu
- jeżeli pobierasz wiele kolumn z tabeli, najpierw użyj kolumny posiadającej wiele duplikatów
- jeżeli kolumna ma unikalny prefiks na kilku pierwszych znakach, lepiej jest zindeksować tylko te kilka pierwszych znaków
- użyj do tego funkcji MySQL pozwalającej na tworzeniu indeksu lewej części kolumny znakowej
- w pewnych warunkach może przydać się podzielenie tabeli na dwie
- w ten sposób możesz uzyskać w jednej tabeli rekordy o stałej długości
- indeksy działają wydajniej dla kolumn, które mają dużą ilość unikalnych wartości w stosunku do ilości rekordów (ang. cardinality)
- lepiej działa indeks dla kolumny 'login' (wszystkie wartości unikalne) niż dla kolumny 'wojewodztwo' (tylko 16 różnych wartości)
- zwróć uwagę na typ pól podczas porównywania
- jeżeli wyszukujesz rekordy na podstawie pola typu INTEGER, nie używaj porównania tego pola z typem STRING (np. WHERE id = '78'). Lepiej porównuj pola tego samego typu (np. WHERE id = 78). Jeżeli porównujesz wartość pola z wartością innego pola, zadbaj aby miały one ten sam typ. Dzięki temu unikniesz konieczności rzutowania. Pamiętaj także, że int i bigint to inne typy pól oraz char(10) nie odpowiada polu char(12).
- staraj się umieszczać indeksowane samotnie po jednej stronie porównania
- w przeciwnym wypadku MySQL nie będzie mógł użyć indeksów. Lepszą wydajność uzyskasz pisząc 'WHERE i < 4 / 2' niż 'WHERE i *2 < 2'
- nie używaj znaków wieloznacznych na początku porówanania LIKE
- używaj pól typu ENUM jeżeli to możliwe
netcoffee.pl*po godzinach - reaktywacja
Ten blog jest kontynuacją bloga dostępnego ongiś pod adresem netcoffee.pl/pogodzinach.
Artykuły, które na to zasługują są przenoszone do nowej wersji bloga. Pozostałe wkrótce znikną.
2006-01-15
Optymalizacja bazy MySql - część II
Wcześniej (Prędkość czy miejsce) pisałem, jak można zaprojektować tabelę MySQL aby baza działała szybciej lub zajmowała mniej miejsca. Teraz przedstawiam garść innych porad:
Subscribe to:
Posts (Atom)