Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySql] indexy w tabeli
damian39
post 12.07.2015, 18:56:48
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.07.2015

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


na jednej z kolumn mam utworzony index przez co zapytania select w laczeniu z innymi tabelami sie szybko wykonuja

problem jest natomiast w sytuacji gdy probuje dodac dużą ilosc danych do tabeli gdzie jeszt utworzony index
zapytanie insert gdy nie ma indexu wykonuje sie w okolo 10 sek
a gdy jest index to samo zapytanie trwa około 140 sek

kilka pytan:
  1. czy to normalna sytuacja?
  2. w jaki sposob mozna poprawic efektywnosc tego zapytania?
  3. czy za kazdym razem przy dodawaniu czegos do tabelki jak w niej jest index to zostaje on przeliczany, czy w jaki sposob to dziala?
  4. gdzie fizycznie tworzone są indexy?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
mmmmmmm
post 13.07.2015, 06:17:10
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


1.tak
2. przed duzym insertem wywalic index, potem zalozyc na nowo
3. tak
4. chyba zalezy to od ENGINE tabeli
Go to the top of the page
+Quote Post
Crozin
post 13.07.2015, 07:15:48
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
przed duzym insertem wywalic index, potem zalozyc na nowo
Przede wszystkim wszystkie zapytania należy objąć pojedynczą transakcją (co notabene i tak powinno być robione) by uniknąć przebudowywania indeksu przy każdym zapytaniu. Dopiero później można się pach w tak drastyczne posunięcia.
Go to the top of the page
+Quote Post
Xelah
post 13.07.2015, 07:41:32
Post #4





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


Ciekawy artykuła na temat działania indeksów masz tutaj:
http://use-the-index-luke.com/sql/dml/insert

plus dokumentacja MySQL:
https://dev.mysql.com/doc/refman/5.7/en/insert-speed.html

Co do rozwiązania tego problemu, to bez szczegółów nie wiele można powiedzieć. Wywalanie indeksu przed insertem ma sens tylko wtedy, kiedy nie masz w tym samym czasie innych operacji na tej samej tablicy. Inacze wydajność i tak poleci na twarz.
Go to the top of the page
+Quote Post
damian39
post 13.07.2015, 17:13:12
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.07.2015

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


@Crozin
tak wlasnie jest zrobione, jest jeden insert

co do usuwanie i tworzenia indexu to juz tak wlasnie zrobilem
problem powstaje jednak taki (jak juz napisal @Xelah) co jezeli ktos generuje jakies inne zapytania do tabeli w tym czasie jak ja dodaje

czy da sie to w jakis sposob rozwiazac zachowujac odpowiednia wydajnosc
Go to the top of the page
+Quote Post
Crozin
post 13.07.2015, 17:37:40
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Możesz pokazać jak w tej chwili to robisz? Jak rozumiem wykonujesz jedno zapytanie INSERT z wieloma rekordami, a nie wiele INSERT-ów z pojedynczymi?
2. Możesz skorzystać z LOAD DATA INFILE.
Go to the top of the page
+Quote Post
damian39
post 13.07.2015, 17:48:30
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.07.2015

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


w ten sposob
Kod
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);


czy przez LOAD DATA INFILE masz na mysli dodawanie tych rekordow z jakiegos pliku
jesli tak to chyba nie za bardzo, bo zanim wysylam zapytanie to sprawdzam jescze rozne rzeczy w tablicy, chyba ze mozna by tam podpiac tablice
Go to the top of the page
+Quote Post
Crozin
post 13.07.2015, 17:54:31
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Tak mam na myśli wczytanie tego z pliku:
Cytat
When loading a table from a text file, use LOAD DATA INFILE. This is usually 20 times faster than using INSERT statements.
Także zamiast wysyłać dane do bazy, możesz zapisać je w pliku, a następnie kazać bazie wczytać je z niego.
Go to the top of the page
+Quote Post
damian39
post 13.07.2015, 18:24:47
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 12.07.2015

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


pomysl napewno warty sprawdzenia, dzieki
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: 14.08.2025 - 13:33