Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: indeksy w bazie
Forum PHP.pl > Forum > Bazy danych > MySQL
8_pasazer_NOSTROMO
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.

przykład A
przykład B
Tomplus
"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."

8_pasazer_NOSTROMO
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 ?
trueblue
Update'owane czy wstawiane?
8_pasazer_NOSTROMO
Może źle się określiłem. Dziennie dochodzi z 300 pozycji nowych.
trueblue
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.
8_pasazer_NOSTROMO
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.
viking
Obejrzyj sobie https://www.youtube.com/live/f4QShF42c6E?feature=shared
Masz 2 video. Internals i db performance
8_pasazer_NOSTROMO
Mam problem z tym zapytaniem. Nie wiem jak zaindekesować bazę danych pod takie zapytanie. Podpowiesz ?


  1. 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%')



w bazie :
nr int(11)
p1 text
p3 varchar(50)
p4 text
p14 varchar(50)

Tomplus
Nadaj index na każdą kolumnę dla której wyszukujesz jakieś dane.
trueblue
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.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.