![]() |
![]() |
![]()
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:
|
|
|
![]() |
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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. |
|
|
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 12.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
pomysl napewno warty sprawdzenia, dzieki
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 13:33 |