MYSQL - optymalizacja zapytań

0

Witam, mam problem z zoptymalizowaniem zapytania. Mam tabelę tabA z kluczem głównym id i innymi polami m.in. kolA, kolB, kolC, kolD na które został nałożony index. Ja podczas pisania procedury tworzę tabelę tymczasową tmp_tabB, gdzie otrzymuję pola takie na jakie został założony index z tabeli tabA i na nie również zakładam index.

Następnie joinuję te dwie tabeli po polach na które został założony index w jednej i drugiej tabeli i niestety trwa to bardzo długo. "Execution plan for" w kolumnie "Key" informuje, że został złapany inny index z tabeli tabA, co za tym idzie liczba wierszy które zostały sprawdzone w celu uzyskania wyniku jest ogromna. Co mogę w takiej sytuacji zrobić? Mogę wymusić działanie indexy, który chcę?

Pozdrawiam.

2

Rozumiem, że join'a robisz między fizyczną tabelą a tą tymczasową ?
Możesz wkleić kod tej procedury ?

2
  1. ddl obu tabel
  2. rząd wielkości liczby rekordów w obu tabelach
  3. problematyczne zapytanie
  4. plan
    jak dasz te dane to można będzie COKOLWIEK powiedzieć
2

Wrzuć warunki do JOIN, a nie do WHERE

3

Pewnie w indeksie brakuje pól, po które silnik bazy danych musi sięgnąć do tabeli. Optymalizator stwierdza, że szybciej będzie mu przeczesać całą tabelę lub użyć innego indeksu, który te pola już zawiera.
Zresztą sam sprawdź - wymuś użycie Twojego indeksu i sprawdź plan zapytania, pewnie będzie działać jeszcze wolniej przez wielokrotne lookupy do tabeli.
A najlepiej będzie, jeśli zrobisz tak jak napisał @abrakadaber - pokaż zapytanie, strukturę tabel i indeksów oraz plan wykonania.

BTW tworzenie tabeli tymczasowej brzydko pachnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1