Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ MySQL _ indeksy w bazie

Napisany przez: 8_pasazer_NOSTROMO 31.10.2023, 09:33:26

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

Napisany przez: Tomplus 1.11.2023, 20:45:29

"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."


Napisany przez: 8_pasazer_NOSTROMO 2.11.2023, 07:20:28

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 ?

Napisany przez: trueblue 2.11.2023, 09:40:30

Update'owane czy wstawiane?

Napisany przez: 8_pasazer_NOSTROMO 2.11.2023, 10:43:14

Może źle się określiłem. Dziennie dochodzi z 300 pozycji nowych.

Napisany przez: trueblue 2.11.2023, 13:20:07

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.

Napisany przez: 8_pasazer_NOSTROMO 2.11.2023, 14:31:45

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.

Napisany przez: viking 2.11.2023, 16:41:26

Obejrzyj sobie https://www.youtube.com/live/f4QShF42c6E?feature=shared
Masz 2 video. Internals i db performance

Napisany przez: 8_pasazer_NOSTROMO 14.11.2023, 14:16:23

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)


Napisany przez: Tomplus 23.11.2023, 11:30:33

Nadaj index na każdą kolumnę dla której wyszukujesz jakieś dane.

Napisany przez: trueblue 24.11.2023, 07:28:50

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)