Witam
Panowie podpowiedzcie, bo nigdzie nie znalazłem jednoznacznej odpowiedzi. Który przykład na zakładanie inkdeksów jest lepszy, szybszy i kiedy ?
Ktoś przede mną pozakładał indeksy na bazach danych raz w jeden sposób raz w drugi. A czasem nawet kombinację tych dwóch wariantów.
Bardziej chodzi mi o podpowiedź jaką drogą lepiej iść i dlaczego, tak z Waszego doświadczenia. Z tego co widzę w zapytaniach, to w WHERE są te pola na które pozakładane są indeksy. Czasami są to dwa czasami trzy a czasami jedno pole w WHERE.
https://legnica-fitness.pl/testowy/foto/001.png
https://legnica-fitness.pl/testowy/foto/002.png
"Głównym założeniem użycia indeksów jest zwiększenie wydajności bazy danych. Ich nieumiejętne wykorzystanie może jednak doprowadzić do efektów całkowicie odwrotnych. Musimy zatem wspomnieć kiedy powinniśmy ich unikać:
- w przypadku małych tabel;
- w przypadku tabel na których dokonujemy częstego wstawiania bądź aktualizowania rekordów;
- w przypadku kolumn zawierających dużą liczbę wartości NULL;
- w przypadku kolumn, których wartości są często zmieniane."
Dziękuje za odp. A dla przykładu, baza danych gdzie jest np. 800 tys rekordów ale updajtowane jest zawsze ostatnie 150 moze 200. Codziennie dochodzi załóżmy 300 pozycji. Ma to sens wg. Ciebie ?
Update'owane czy wstawiane?
Może źle się określiłem. Dziennie dochodzi z 300 pozycji nowych.
800 tys. rekordów to nie jest dużo na MySQL. Nawet w przypadku UPDATE przebudowa indeksu nie powinna stanowić problemu.
Pytanie co ma mieć sens według Ciebie? Z obrazków, które przesłałeś nic nie wynika, bo nie wiadomo czy pozakładane indeksy mają sens, a ten można określić widząc zapytania.
zapytań jest dużo rozsianych po stronie i ktoś widocznie pozakładał indeksy do każdego z nich. Wszystkie założone indeksy występują w warunkach zapytań.
czasami w warunku jest tylko WHERE p9='cos tam'
czasami WHERE p9='cos tam' && p10='cos tam'
czasami WHERE p9='cos tam' && p10='cos tam' && p11='cos tam'
Lepiej zrobić 3 osobne czy jeden wspólny ? Bardziej szukam logiki ich tworzenia.
Obejrzyj sobie https://www.youtube.com/live/f4QShF42c6E?feature=shared
Masz 2 video. Internals i db performance
Mam problem z tym zapytaniem. Nie wiem jak zaindekesować bazę danych pod takie zapytanie. Podpowiesz ?
SELECT nr,p1,p2,p3,p4,p5,p6,p7,p8,p9,p11,p12,p13,p14,p15,blok,spos_arch,status_arch,nr_prot_arch,rok_arch,nr_sap FROM kor2023 where (nr LIKE '%piotr%' || p1 LIKE '%piotr%' || p3 LIKE '%piotr%' || p4 LIKE '%piotr%' || p14 LIKE '%piotr%')
Nadaj index na każdą kolumnę dla której wyszukujesz jakieś dane.
W przypadku LIKE '%fraza%' indeksy nie pomogą, ewentualnie w przypadku kiedy lewa część jest stała, np.: LIKE 'fraza%'.
Powinieneś założyć indeks FULLTEXT i używać funkcji MATCH/AGAINST.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)