Pełny przewodnik po poprawieniu wydajności zapytań do bazy danych w WordPressie

3 minuty na przeczytanie.
2026-03-16
2026-06-06
2,196
Zarabiam prowizję, gdy robisz zakupy poprzez poniższe linki, bez żadnych dodatkowych kosztów dla Ciebie.

Pełny przewodnik po poprawieniu wydajności zapytań do bazy danych w WordPressie

Baza danych stanowi podstawę witryny WordPress – w niej przechowuje się cały treść, dane użytkowników oraz ustawienia. Z rozwojem zawartości witryny niedostatecznie efektywne zapyty do bazy danych mogą stać się głównym powodem spowolnienia działania witryny i negatywnego wpływu na doświadczenie użytkowników. Efektywność zapytów do bazy danych bezpośrednio wpływa na szybkość ładowania stron, zużywanie zasobów serwera, a także pośrednio na indeksację i pozycję witryny w wynikach wyszukiwarki.

Podczas generowania jednej strony WordPress może dojść do dziesięciu lub nawet setek interakcji z bazą danych. Dlatego optymalizacja zapytań do bazy danych jest kluczowym elementem w procesie poprawy wydajności i przynosi wyraźne korzyści. Poniżej zostanie systematycznie opisane, w jaki sposób można zwiększyć efektywność tych zapytań.

Zrozumienie życiowego cyklu zapytań do bazy danych WordPress

Aby efektywnie optymalizować działanie WordPress, należy najpierw zrozumieć, w jaki sposób generowane i wykonywane są zapytania. Standardowy żądek zapytania przechodzi przez kilka kluczowych etapów: od jego wysłania, przetwarzania po powrót wyników, a na każdym z tych etapów istnieją możliwości dostosowań, które mogą poprawić wydajność systemu.

Polecamy lekturę. Jak tworzyć efektywną i estetyczną stronę internetową dla firmy za pomocą tematów WordPress?

Wbudowana klasa obiektów do realizacji zapytań w WordPressie

Na poziomie wykonywania w środkowym obszarze kodu WordPress używa głównie…WP_QueryKlasa jest przeznaczona do obsługi różnych zapytań dotyczących danych. Jest ona kluczową elementem w budowaniu treści stron internetowych, takich jak artykuły, strony ogólne oraz specjalne typy artykułów. Na przykład, zawartość witryny głównej, stron kategorii oraz listy artykułów na poszczególnych stronach jest w większości generowana przy użyciu tej klasy.WP_QueryZawiera elementy sterujące przykładem implementacji. Zabiera na siebie proces budowy złożonych zdań SQL, a programiści mogą określać warunki wyszukiwania za pomocą arrayu parametrów.

UltaHost – hostingu dla stron WordPress
Gwarancja zwrotu pieniędzy w ciągu 30 dni, nieograniczony przepustowość sieci i dostęp do bazy danych, bezpłatna ochrona przed atakami typu DDoS. Promocja: 50% przy zakupie na 3 lata.
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
    'category_name' => 'news'
);
$query = new WP_Query($args);

Mechanizm cache’owania wyników wyszukiwania

WordPress posiada wewnętrzny mechanizm cache’owania obiektów, który ma na celu zmniejszenie liczby powtarzonych zapytań do bazy danych.get_post()get_term_by()Gdy używa się takich funkcji, WordPress próbuje najpierw uzyskać dane z pamięci cache.

Podstawą tego cache jest…WP_Object_CacheKlasa… Ale należy zaznaczyć, że w standardowym ustawieniu (tj. gdy nie jest zainstalowany plugin do utrzymywania danych w pamięci cache) cache jest “niepierwszoplanowe” i istnieje tylko przez czas trwania jednego żądania na stronie. To oznacza, że przy następnym wejściu użytkownika cache jest już nieaktualne, więc dane muszą zostać ponownie pobrane z bazy danych. Aby uzyskać znaczną poprawę wydajności, zwykle konieczne jest wykorzystanie backendów do utrzymywania danych w pamięci cache, takich jak Redis lub Memcached, w połączeniu z pluginami typu Redis Object Cache.WP_Object_CachePołączenie.

Powszechnie używane narzędzia do analizy wolnych zapytań (slow queries)

Poszukiwanie potencjalnych problemów i rozwiązanych jest pierwszym krokiem w procesie optymalizacji. Najbardziej przydatnym narzędziem w tym celu jest WordPress.SAVEQUERIESDybugowanie stałych (constantów). Definiuj je w taki sposób, aby…trueWordPress przechowuje wszystkie wykonywane zapytania SQL wraz z ich czasem trwania w globalnym arrykucie.

// 在 wp-config.php 中添加
define('SAVEQUERIES', true);
// 页面底部(如footer.php)检查查询
if (current_user_can('administrator')) {
    global $wpdb;
    print_r($wpdb->queries);
}

Ponadto wiele profesjonalnych narzędzi do monitorowania zapytań, takich jak Query Monitor, oferuje intuicyjniejszy interfejs, który umożliwia oglądanie wszystkich zapytań, źródeł ich wykonywania (narzędzia lub tematów), czasu ich realizacji, a także wyświetla powolne zapytania w nagłym stylu. To doskonałe narzędzie do optymalizacji środowiska rozwojowego. W środowisku produkcyjnym należy włączyć logowanie powolnych zapytań na serwerze baz danych (np. MySQL) w celu długoterminowego monitoringu.

Polecamy lekturę. Pełny przewodnik po WooCommerce: jak stworzyć swoją profesjonalną stronę e-handlu od zera

Praktyki optymalizacji na poziomie kodu źródłowego

Kod stanowi podstawę efektywnych wyszukiwań. Bez względu na to, czy chodzi o rozwój tematów („topics”) czy dodatków („plugins”), stosowanie najlepszych praktyk pozwala uniknąć problemów z wydajnością na początku procesu rozwoju.

Poprawne używanie funkcji kluczowych API

WordPress oferuje bogatą i zoptymalizowaną gamę funkcji API, które należy używać zamiast pisania kodu SQL wprostu. Na przykład, aby uzyskać informacje o artykułach należących do danej kategorii, można skorzystać z dostępnych funkcji API.
Przypadek kontrary (nieskuteczny): Używanie bezpośrednie$wpdb->get_results()Napisz oryginalny kod SQL, przy czym możesz pominąć użycie mechanizmów cache.
Przykład (efektywny): UżywanieWP_Querylub jego zagnieczęconą funkcjęget_posts()Automatycznie korzysta z cache’u, a jego wydajność jest utrzymywana przez zespół odpowiedzialny za jego obsługę.

W pętli należy unikać użycia takich elementów jak…get_post_meta()Aby wykonać wiele zapytań za pomocą danej funkcji, należy postąpić poprawnie podczas jej inicjalizacji.WP_QueryW tym momencie, poprzez…'meta_query'Można filtrować parametry lub używać ich w innych celach.update_postmeta_cacheMożliwość uzyskania metadanych wszystkich artykułów za jednym razem.

hosting.com Hosting współdzielony
Wysoka wydajność dzięki procesorom AMD EPYC, pamięci masowej NVMe SSD i LiteSpeed, wewnętrzne wsparcie ekspertów 24/7, zaawansowane środki bezpieczeństwa, w tym SSL, brute force, ochrona przed złośliwym oprogramowaniem i DDoS, oszczędność do 73%

Implementacja API Transients do krótkoterminowego ustawiania cache’u danych

Dla drogich zapytań, które wymagają wysokiej wydajności w czasie wykonywania (np. wyniki wywołania zewnętrznych API lub dane pochodzące z złożonych obliczeń), należy użyć API Transients w WordPress do ich ustawienia w cache. Zasadniczo polega to na przechowywaniu danych pod określonym kluczem wraz z czasem wygaśania w bazie danych (lub w pamięci obiektowej, jeśli jest to dostępne).
Na przykład: ustawienie cache’u dla listy popularnych artykułów.

$popular_posts = get_transient('mytheme_popular_posts');
if (false === $popular_posts) {
    // 如果缓存不存在或已过期,执行复杂查询
    $args = array('meta_key' => 'view_count', 'orderby' => 'meta_value_num', 'posts_per_page' => 5);
    $popular_posts = new WP_Query($args);
    // 缓存查询结果12小时(43200秒)
    set_transient('mytheme_popular_posts', $popular_posts, 43200);
}

Optymalizacja budowy własnych zapytań

Gdy konieczne jest użycie…$wpdbGdy tworzysz klasę do wykonywania własnych zapytań, należy ścisło przestrzegać zasad bezpieczeństwa oraz używać właściwych metod pomocniczych. Koniecznie to zrobić.$wpdb->prepare()Przygotuj się do wykonania zapytania, aby zapobiec atakom typu SQL injection oraz upewnij się, że dane są poprawnie wyekscytowane.

global $wpdb;
$user_id = 123;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "SELECT * FROM {$wpdb->prefix}custom_table WHERE user_id = %d AND status = %s",
        $user_id,
        'active'
    )
);

W tym samym czasie należy upewnić się, że pola w tabeli wyszukiwania posiadają odpowiednie indeksy.JOINZłożony lub wymagający specjalnych procedurWHERECyklusy, to szczególnie istotne.

Polecamy lekturę. Ostateczny przewodnik po optymalizacji WordPressa: kompletna strategia szybkości i bezpieczeństwa

Optymalizacja zapytań za pomocą zaawansowanych wtyczek i usług zewnętrznych

Gdy optymalizacja kodu napotka na ograniczenia, można skorzystać z zaawansowanych narzędzi i usług, aby uzyskać dalszy wzrost wydajności.

Włączenie cache’u obiektów trwałych

To jeden z najskuteczniejszych sposobów na obsługę witryn internetowych o dużym ruchu. Poprzez instalację serwerów Redis lub Memcached w połączeniu z odpowiednimi pluginami do WordPress (np. “Redis Object Cache” lub “Memcached Redux”) można zwiększyć wydajność witryny i poprawić czas jej ładowania.WP_Object_CacheDane są przechowywane w pamięci.
Dzięki temu staje się możliwe ustawienie cache’u dla żądań między stronami. Na przykład, po tym jak fragment HTML popularnego artykułu zostanie wygenerowany i zapisany w cache, wszystkie następne żądania użytkowników będą odczytywane bezpośrednio z pamięci, bez konieczności wykonywania kodu w PHP ani wysyłania zapytań do bazy danych. Po skutecznej konfiguracji ustawień zauważysz znaczną redukcję liczby wykonywanych zapytań.

Hosting współdzielony InterServer
Hosting współdzielony $2.50 USD miesięcznie, pierwszy miesiąc $0.1 USD kod promocyjny tryinterserver, 461 skryptów aplikacji w chmurze, instalacja jednym kliknięciem.

Używanie paginacji i łagodnego ładowania (ang. lazy loading)

Nieskończony przesuwanie lub ładowanie dużej liczby artykułów może doprowadzić do dużego obciążenia systemu (wysokich kosztów wykonywania zapytań). W takich przypadkach należy to uniknąć.WP_QueryUżywać tego rozsądnie.'posts_per_page'Wraz z parametrami sortowania i paginowania można uniknąć sytuacji, gdy jednorazowo są pobierane setki lub tysiące rekordów. W przypadku długich list lub bibliotek zdjęć warto włączyć technologię „Lazy Load” (obciążanie na żądanie), która umożliwia ładowanie treści, które nie znajdują się w widoku użytkownika, dopiero w momencie, gdy to jest konieczne. To znacząco zmniejszy obciążenie bazy danych podczas pierwszego otwarcia strony.

Rozważaj wprowadzenie kopii bazy danych w trybie tylko do odczytywania.

W przypadku bardzo dużych witryn WordPress, na których dużo się czyta, a mało pisze (np. portali informacyjnych), można rozważyć implementację replikacji bazy danych typu Master-Slave. Wszystkie operacje pisania (publikowanie artykułów, komentarzy) są przeprowadzane na bazie danych master, natomiast większość operacji czytania jest rozdzielona na jedną lub kilka baz danych slave, które są dostępne tylko w trybie tylko-do-czytania. Do realizacji tego rozwiązania potrzebny jest plugin lub głębokie dostosowanie systemu; techniczne wymagania są dość wysokie, ale dzięki temu możliwe jest znaczące rozszerzenie wydajności bazy danych pod względem liczby jednoczesnych operacji czytania.

Optymalizacja konfiguracji serwera i bazy danych

Ostatecznie wszystkie zapytania muszą zostać wykonywane na serwerze MySQL lub MariaDB. Optymalizacja konfiguracji serwera stanowi klucz do uzyskania wysokiej efektywności w obsłudze zapytań.

Kluczowe parametry do dostosowania wydajności MySQL

W konfiguracji serwera baz danych (na przykład…)my.cnfW tych parametrach kilka z nich ma kluczowe znaczenie dla wydajności WordPress.innodb_buffer_pool_sizeRozmiar bufera InnoDB powinien być ustawiony na poziomie 70–80% dostępnej pamięci (w jednostkach typu TB). To decyduje o tym, ile danych i indeksów może baza danych przechowywać w pamięci.query_cache_size(Wyświetlenie wielkości pamięci cache) Choć funkcja została usunięta w wersjach 8.0 i późniejszych, w wcześniejszych wersjach była przydatna w przypadkach, gdy często występowały powtarzające się proste zapytania.max_connectionsUstawienia muszą być rozsądne, aby jednocześnie obsługiwać połączenia z serwerem internetowym oraz połączenia rezerwne.

Regularna konserwacja bazy danych

Podczas używania WordPressu generuje się dużo zbędnych danych, takich jak wersje tekstów z różnymi zmianami, szkice, komentarze czekające na przyjęcie, a także dane tymczasowo wygasłe. Te dane bez potrzeby powiększają rozmiary tabel w bazie danych i zmniejszają efektywność wykonywania zapytań. Można regularnie używać wtyczek, np. “WP-Optimize” lub “Advanced Database Cleaner”, aby je usunąć. Ponadto wykonanie operacji optimizacji (OPTIMIZE TABLE) lub naprawy (REPAIR TABLE) tabel w bazie danych pomaga uporządkować ich strukturę i zwiększyć efektywność operacji wejścia/wyjścia (I/O). Zaleca się wykonywać te operacje w okresach niskiej aktywności serwera, za pomocą narzędzia phpMyAdmin lub w linii komend.

Tworzenie efektywnych indeksów dla tabel w bazie danych

To kluczowa optymalizacja na poziomie bazy danych. Indeksy działają podobnie do zawartości indeksu w książeczce – pomagają silnikowi bazy danych szybko odnaleźć potrzebne dane. Najpierw należy upewnić się, że kluczowe tabele WordPressa (zwłaszcza…)wp_postswp_postmetawp_commentsIndeksy kluczyowych poli (kluczowych i zależnych) na tym obiekcie są w pełni utworzone. Ponadto, w przypadku tych poli, które występują często…WHEREORDER BYJOINPola zawarte w warunkach (np.…)post_statuspost_typecomment_post_IDmeta_keyNależy ocenić, czy konieczne jest dodanie zwykłego indeksu lub indeksu złożonego. Dodanie indeksu można wykonać za pomocą komend SQL w phpMyAdmin, na przykład:

ALTER TABLE wp_postmeta ADD INDEX idx_meta_key (meta_key(50));

Uwaga: Dodawanie indeksów zajmuje dodatkowe miejsce na dysku i delikatnie wpływa na szybkość zapisu danych. Konieczne jest uwzględnienie tych zalet i wad.

Podsumowanie.

Optymalizacja zapytań do bazy danych w WordPress jest procesem złożonym, który wymaga współpracy na czterech poziomach: diagnostyki, programowania, używania narzędzi oraz zarządzania serwerem. Najlepszą praktyką jest następujący podejście: najpierw użyć narzędzi do precyzywnego wykrywania powolnych zapytań; potem w ramach procesu rozwoju stosować się ściśle do standardów API i mechanizmów cache, unikając nieefektywnego kodu; następnie wdrożyć mechanizmy cache dla obiektów w celu natychmiastowego poprawienia wydajności witryny; na koniec dokonać odpowiedniej konfiguracji i konserwacji serwera baz danych, a także stworzyć efektywne indeksy dla dużych tabel. Dzięki temu połączeniu różnych działań nawet witryny z dużą ilością treści będą mieć efektywną pracę bazy danych i szybką odpowiedź, co zapewni użytkownikom oraz wyszukiwarkom bezproblemowe korzystanie z witryny.

FAQ – najczęściej zadawane pytania.

Gdzie w WordPress przechowywane są “ulotne” dane?

Miejsce przechowywania danych z API Transients w WordPressu zależy od ustawień. Jeśli na stronie nie jest włączony mechanizm cache’owania obiektów na długotermin (np. Redis), dane tymczasowe są przechowywane w bazie danych.wp_optionsW tabeli (…)_transient_Jeśli jest włączony cache obiektów trwałych, dane tymczasowe są najpierw przechowywane w pamięci (np. w Redis), co zapewnia wyjątkowo szybkie operacje odczytywania i zapisywania oraz znacząco zmniejsza obciążenie bazy danych.

Jak usunąć w masowym trybie nieaktualne, tymczasowe dane?

Data tymczasowa, która uległa wyprzedzeniu, nie zawsze są automatycznie usuwana. Możesz użyć specjalnych wtyczek do czyszczenia bazy danych (np. WP-Optimize), które często oferują możliwość jednorazowego usunięcia takich danych. Jeśli masz pewność co do bezpieczeństwa, możesz też wykonać odpowiednie komendy SQL w phpMyAdmin.

DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%';

Czy jest normalne, że po włączeniu cache obiektów w Redis liczba wykonywanych zapytań znacząco spada?

To jest w pełni normalne i stanowi główny efekt włączenia mechanizmu cache’owania obiektów. Spadek liczby wykonywanych zapytań oznacza, że dużo danych (np. menu, obiekty artykułów, wyniki zapytań) jest pobieranych bezpośrednio z pamięci (Redis), bez konieczności wysyłania żadnych żądań do bazy danych. To znacząco zmniejsza obciążenie procesora (CPU) i operacji wejścia/wyjścia (I/O) serwera bazy danych, co jest pokazatem poprawy wydajności. Możesz zaobserwować znaczący wzrost procenta przypadków, gdy cache jest używany do obsługi zapytań, za pomocą dodatku Query Monitor.

Na jakich polach w bazie danych należy tworzyć indeksy?

Tworząc indeks, należy kierować się zasadami częstych wyszukiwań oraz wysokiej efektywności filtracji. Ważne jest uwzględnienie poli, które są często wykorzystywane do wyszukiwania, sortowania i łączenia danych. W WordPressie typowymi kandidatami do indeksowania są następujące pola:wp_poststabularpost_typepost_statusKombinacja (często używana przy wyszukiwaniu opublikowanych artykułów)wp_postmetatabularmeta_key(Często używane do filtrowania według określonych metadanych)wp_commentstabularcomment_post_ID(Niebieski tekst: „Wykorzystuje się do powiązania artykułów z komentarzami.”) Przed dodaniem indeksu warto przeanalizować konkretny log sprawiających problemy zapytań (slow query logs).