Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> indeksy w bazie
8_pasazer_NOSTRO...
post 31.10.2023, 09:33:26
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
Tomplus
post 1.11.2023, 20:45:29
Post #2





Grupa: Zarejestrowani
Postów: 1 838
Pomógł: 226
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
8_pasazer_NOSTRO...
post 2.11.2023, 07:20:28
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


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 ?
Go to the top of the page
+Quote Post
trueblue
post 2.11.2023, 09:40:30
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Update'owane czy wstawiane?


--------------------
Go to the top of the page
+Quote Post
8_pasazer_NOSTRO...
post 2.11.2023, 10:43:14
Post #5





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


Może źle się określiłem. Dziennie dochodzi z 300 pozycji nowych.
Go to the top of the page
+Quote Post
trueblue
post 2.11.2023, 13:20:07
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
8_pasazer_NOSTRO...
post 2.11.2023, 14:31:45
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
viking
post 2.11.2023, 16:41:26
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
8_pasazer_NOSTRO...
post 14.11.2023, 14:16:23
Post #9





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


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)

Go to the top of the page
+Quote Post
Tomplus
post 23.11.2023, 11:30:33
Post #10





Grupa: Zarejestrowani
Postów: 1 838
Pomógł: 226
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Nadaj index na każdą kolumnę dla której wyszukujesz jakieś dane.
Go to the top of the page
+Quote Post
trueblue
post 24.11.2023, 07:28:50
Post #11





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.



--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 23:34