Biblioteka promptów

Przyspieszenie wolnego zapytania SQL

Diagnoza wolnego zapytania na podstawie planu wykonania i propozycja indeksów lub przebudowy.

Prompt – 5 zmiennych do uzupełnienia

Pomóż mi przyspieszyć wolne zapytanie SQL.
Baza danych i wersja: [BAZA DANYCH].
Ile trwa teraz i ile rekordów mają tabele: [CZAS I ROZMIAR].

Zapytanie:
[WKLEJ ZAPYTANIE]

Struktura tabel i istniejące indeksy (SHOW CREATE TABLE lub opis):
[WKLEJ STRUKTURĘ]

Wynik EXPLAIN (jeśli mam):
[WKLEJ EXPLAIN]

Zrób:
1. wyjaśnij prostym językiem, co spowalnia zapytanie (pełne skanowanie, brak indeksu, sortowanie na dysku, funkcja na kolumnie itp.),
2. zaproponuj zmiany w kolejności od najprostszej: indeks, przebudowa warunku, zmiana JOIN-ów, podział na etapy,
3. przy każdym indeksie podaj polecenie CREATE INDEX i wpływ na zapis do tabeli,
4. napisz, jak sprawdzić efekt (co powinno się zmienić w EXPLAIN).
Nie zmieniaj wyniku zapytania – ma zwracać dokładnie to samo.

Kiedy użyć tego promptu

Gdy strona, raport albo panel administracyjny ładuje się kilka sekund, a winowajcą jest jedno zapytanie do bazy. Często wystarcza jeden dobrze dobrany indeks albo przepisanie warunku, ale trzeba wiedzieć, gdzie szukać. Plan wykonania (EXPLAIN) mówi to wprost – model pomaga go odczytać.

Przykład

Przykładowe dane do uzupełnienia:

  • BAZA DANYCH: MySQL 8.0 (sklep na WooCommerce)
  • CZAS I ROZMIAR: raport sprzedaży ładuje się ok. 12 sekund; tabela wp_postmeta ma kilka milionów wierszy

Czego się spodziewać: Model wskaże np., że warunek na wartości meta przy pełnym skanowaniu tabeli z milionami wierszy wymusza przeglądanie całej tabeli, zaproponuje indeks złożony na odpowiednich kolumnach z poleceniem CREATE INDEX, ostrzeże przed wpływem na zapis i podpowie, że w EXPLAIN typ dostępu powinien zmienić się z ALL na ref.

Jak dopasować prompt do siebie

  • Brak dostępu do EXPLAIN (np. hosting współdzielony): poproś o analizę na podstawie samego zapytania i struktury – będzie mniej pewna, ale nadal pomocna.
  • Zapytanie generowane przez ORM lub wtyczkę: wklej kod, który je tworzy, i poproś o zmianę po stronie aplikacji.
  • PostgreSQL: poproś o interpretację EXPLAIN ANALYZE z czasami poszczególnych kroków.

Wskazówki

  • Testuj zmiany na kopii bazy, nie na produkcji – dodanie indeksu do dużej tabeli może ją na chwilę zablokować.
  • Mierz przed i po na tych samych danych; pojedynczy pomiar bywa mylący przez cache.
  • Usuń dane osobowe z przykładowych danych, jeśli wklejasz wyniki zapytań.

Najczęstsze błędy

  • Dodawanie indeksów na wszystkie kolumny „na zapas” – spowalnia zapis i zajmuje miejsce.
  • Optymalizacja zapytania, które wykonuje się raz dziennie w nocy, zamiast tego, które spowalnia każdą stronę.

Co dalej – dopytaj model

Gdy dostaniesz odpowiedź, możesz pójść krok dalej tym poleceniem:

Przygotuj plan wdrożenia tych zmian na produkcji: kolejność, czas wykonania, jak sprawdzić, że nic się nie zepsuło, i jak wycofać zmianę.