{"id":8842,"date":"2026-08-21T17:50:00","date_gmt":"2026-08-21T15:50:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=8842"},"modified":"2026-10-24T02:04:21","modified_gmt":"2026-10-24T00:04:21","slug":"baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/","title":{"rendered":"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel"},"content":{"rendered":"<h2>Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel<\/h2>\n<p>Metadane wpis\u00f3w sprawdzaj\u0105 si\u0119 w wielu rozszerzeniach WordPressa. W\u0142asna tabela staje si\u0119 przydatna, gdy zmierzone koszty zapyta\u0144, cz\u0119ste aktualizacje licznik\u00f3w lub raportowanie przekraczaj\u0105 praktyczne mo\u017cliwo\u015bci obecnego schematu. Sama liczba wierszy nie wyznacza tej granicy. Migracja oznacza r\u00f3wnie\u017c dodatkow\u0105 odpowiedzialno\u015b\u0107 za aktualizacje, pami\u0119\u0107 podr\u0119czn\u0105 i usuwanie danych.<\/p>\n<h2>Co zwi\u0119ksza koszt obs\u0142ugi metadanych<\/h2>\n<p>Standardowa tabela przechowuje warto\u015b\u0107 w <code>meta_value LONGTEXT<\/code>, obok identyfikatora wpisu i klucza. Elastyczny model Entity\u2013Attribute\u2013Value pozwala dodawa\u0107 r\u00f3\u017cne pola bez zmiany schematu. Domy\u015blne indeksy obejmuj\u0105 identyfikator wpisu oraz prefiks klucza; brak domy\u015blnego indeksu liczbowego na warto\u015bci.<\/p>\n<p>Wiele warunk\u00f3w dotycz\u0105cych metadanych mo\u017ce wymaga\u0107 wielu z\u0142\u0105cze\u0144 tabel. Dok\u0142adna liczba zale\u017cy od operator\u00f3w i relacji logicznych: WordPress potrafi ponownie wykorzysta\u0107 zgodne aliasy tabel. Trzy kryteria nie zawsze oznaczaj\u0105 trzy oddzielne z\u0142\u0105czenia. Rzutowanie na typ liczbowy umo\u017cliwia por\u00f3wnywanie i sortowanie liczb, ale nie tworzy indeksu liczbowego na kolumnie tekstowej.<\/p>\n<p>Tablice i obiekty powoduj\u0105 dodatkowy koszt serializacji w API metadanych. Samo filtrowanie SQL nie deserializuje warto\u015bci PHP. Pami\u0119\u0107 podr\u0119czna metadanych i warunkowa deserializacja r\u00f3wnie\u017c przecz\u0105 stwierdzeniu, \u017ce ka\u017cde zapytanie serializuje wszystkie warto\u015bci. Lepsz\u0105 podstaw\u0105 decyzji s\u0105 rejestr wolnych zapyta\u0144, wygenerowany SQL, <code>EXPLAIN<\/code>, liczba analizowanych wierszy i reprezentatywne obci\u0105\u017cenie r\u00f3wnoleg\u0142e.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/quality-8842-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Metadane lub w\u0142asna tabela: zmierzone koszty zapyta\u0144, liczniki z typami, atomowy przyrost i ograniczona integracja z WordPressem.\"><figcaption>Metadane lub w\u0142asna tabela: zmierzone koszty zapyta\u0144, liczniki z typami, atomowy przyrost i ograniczona integracja z WordPressem.<\/figcaption><\/figure>\n<h2>Schemat dla licznika<\/h2>\n<p>Przyk\u0142ad przechowuje jeden licznik dla pary wpis\u2013typ zdarzenia. Z\u0142o\u017cony klucz g\u0142\u00f3wny definiuje t\u0119 to\u017csamo\u015b\u0107; <code>BIGINT UNSIGNED<\/code> przechowuje stan licznika, a <code>DATETIME<\/code> czas ostatniej aktualizacji w UTC. Dodatkowy indeks wspiera operacje utrzymaniowe oparte na czasie. Inne wzorce dost\u0119pu wymagaj\u0105 innych indeks\u00f3w, zwi\u0119kszaj\u0105cych tak\u017ce koszt zapisu i zaj\u0119te miejsce.<\/p>\n<p>Funkcja instalacyjna nale\u017cy do wersjonowanej procedury aktywacji lub aktualizacji wtyczki, a nie do ka\u017cdego wy\u015bwietlenia strony. Prefiks tabeli i ustawienia kodowania pochodz\u0105 z WordPressa. <code>dbDelta()<\/code> tworzy lub dostosowuje opisany schemat; bez automatycznej gwarancji wydajno\u015bci. Przeniesienie danych, kontrola wersji schematu i wycofanie zmian wymagaj\u0105 osobnej implementacji.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"php\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">PHP<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-php\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">function<\/span> <span class=\"cbb-function\">lw_metrics_install<\/span>() {\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">global<\/span> <span class=\"cbb-variable\">$wpdb<\/span>;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-variable\">$table<\/span> = <span class=\"cbb-variable\">$wpdb<\/span><span class=\"cbb-operator\">-&gt;<\/span>prefix . <span class=\"cbb-string\">'custom_analytics_metrics'<\/span>;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-variable\">$collate<\/span> = <span class=\"cbb-variable\">$wpdb<\/span><span class=\"cbb-operator\">-&gt;<\/span><span class=\"cbb-function\">get_charset_collate<\/span>();\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-variable\">$sql<\/span> = <span class=\"cbb-string\">\"CREATE TABLE <\/span><span class=\"cbb-variable\">$table<\/span><span class=\"cbb-string\"> (<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">        post_id bigint(20) unsigned NOT NULL,<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">        event_type varchar(32) NOT NULL,<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">        hit_count bigint(20) unsigned NOT NULL DEFAULT 0,<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">        last_updated datetime NOT NULL,<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">        PRIMARY KEY  (post_id,event_type),<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">        KEY updated (last_updated)<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">    ) ENGINE=InnoDB <\/span><span class=\"cbb-variable\">$collate<\/span><span class=\"cbb-string\">;\"<\/span>;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">require_once<\/span> <span class=\"cbb-constant\">ABSPATH<\/span> . <span class=\"cbb-string\">'wp-admin\/includes\/upgrade.php'<\/span>;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-function\">dbDelta<\/span>(<span class=\"cbb-variable\">$sql<\/span>);\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n<h2>Zwi\u0119kszanie licznika bez wcze\u015bniejszego sprawdzania istnienia<\/h2>\n<p>Funkcja wymaga WordPressa 6.2 lub nowszego ze wzgl\u0119du na symbol zast\u0119pczy identyfikatora <code>%i<\/code>. Dozwolone typy zdarze\u0144 i dodatnie warto\u015bci ca\u0142kowite s\u0105 celowo ograniczone. Ponowne przekazanie przyrostu eliminuje przestarza\u0142e odwo\u0142anie MySQL <code>VALUES()<\/code> w cz\u0119\u015bci aktualizuj\u0105cej i dzia\u0142a r\u00f3wnie\u017c w MariaDB.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"php\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">PHP<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-php\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">function<\/span> <span class=\"cbb-function\">lw_metrics_increment<\/span>(<span class=\"cbb-variable\">$post_id<\/span>, <span class=\"cbb-variable\">$event_type<\/span>, <span class=\"cbb-variable\">$delta<\/span> = <span class=\"cbb-number\">1<\/span>) {\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">global<\/span> <span class=\"cbb-variable\">$wpdb<\/span>;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> (!<span class=\"cbb-function\">is_int<\/span>(<span class=\"cbb-variable\">$post_id<\/span>) || <span class=\"cbb-variable\">$post_id<\/span> &lt; <span class=\"cbb-number\">1<\/span> ||\n<\/span><span class=\"cbb-line\">        !<span class=\"cbb-function\">is_int<\/span>(<span class=\"cbb-variable\">$delta<\/span>) || <span class=\"cbb-variable\">$delta<\/span> &lt; <span class=\"cbb-number\">1<\/span> || <span class=\"cbb-variable\">$delta<\/span> &gt; <span class=\"cbb-number\">1000000<\/span> ||\n<\/span><span class=\"cbb-line\">        !<span class=\"cbb-function\">in_array<\/span>(<span class=\"cbb-variable\">$event_type<\/span>, &#91;<span class=\"cbb-string\">'page_view'<\/span>, <span class=\"cbb-string\">'conversion_hit'<\/span>&#93;, <span class=\"cbb-constant\">true<\/span>)) {\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-keyword\">new<\/span> <span class=\"cbb-type\">WP_Error<\/span>(<span class=\"cbb-string\">'invalid_metric'<\/span>, <span class=\"cbb-string\">'Invalid metric input'<\/span>);\n<\/span><span class=\"cbb-line\">    }\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-variable\">$table<\/span> = <span class=\"cbb-variable\">$wpdb<\/span><span class=\"cbb-operator\">-&gt;<\/span>prefix . <span class=\"cbb-string\">'custom_analytics_metrics'<\/span>;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-variable\">$sql<\/span> = <span class=\"cbb-variable\">$wpdb<\/span><span class=\"cbb-operator\">-&gt;<\/span><span class=\"cbb-function\">prepare<\/span>(\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-string\">\"INSERT INTO %i (post_id, event_type, hit_count, last_updated)<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">         VALUES (%d, %s, %d, UTC_TIMESTAMP())<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">         ON DUPLICATE KEY UPDATE<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">             hit_count = hit_count + %d,<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-string\">             last_updated = UTC_TIMESTAMP()\"<\/span>,\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-variable\">$table<\/span>, <span class=\"cbb-variable\">$post_id<\/span>, <span class=\"cbb-variable\">$event_type<\/span>, <span class=\"cbb-variable\">$delta<\/span>, <span class=\"cbb-variable\">$delta<\/span>\n<\/span><span class=\"cbb-line\">    );\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> (<span class=\"cbb-constant\">false<\/span> === <span class=\"cbb-variable\">$wpdb<\/span><span class=\"cbb-operator\">-&gt;<\/span><span class=\"cbb-function\">query<\/span>(<span class=\"cbb-variable\">$sql<\/span>)) {\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-keyword\">new<\/span> <span class=\"cbb-type\">WP_Error<\/span>(<span class=\"cbb-string\">'metric_write_failed'<\/span>, <span class=\"cbb-string\">'Metric write failed'<\/span>);\n<\/span><span class=\"cbb-line\">    }\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">true<\/span>;\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n<p>Unikalny klucz sprawia, \u017ce pojedyncza instrukcja InnoDB tworzy nowy licznik albo atomowo zwi\u0119ksza istniej\u0105cy. R\u00f3wnoleg\u0142e zapisy do popularnego licznika nadal mog\u0105 czeka\u0107 na blokady. B\u0142\u0105d bazy powoduje zwr\u00f3cenie <code>WP_Error<\/code>; kod wywo\u0142uj\u0105cy musi obs\u0142u\u017cy\u0107 wynik. Escapowanie parametr\u00f3w chroni sk\u0142adni\u0119 SQL, ale nie zast\u0119puje autoryzacji, wiarygodnego \u017ar\u00f3d\u0142a zdarze\u0144 ani ochrony CSRF.<\/p>\n<p>Licznik zlicza zaakceptowane wywo\u0142ania, tak\u017ce powt\u00f3rzone dostarczenia. Przetwarzanie ka\u017cdego zdarzenia dok\u0142adnie raz wymaga osobnego mechanizmu idempotencji, na przyk\u0142ad unikalnych identyfikator\u00f3w zdarze\u0144 i transakcyjnego rejestru. Automatyczne ponowienie po niejednoznacznej odpowiedzi mo\u017ce podwoi\u0107 wynik. Przyk\u0142ad stanowi element rozwi\u0105zania, a nie kompletny endpoint analityczny.<\/p>\n<div class=\"lw-faq\"><h2>Pytania i odpowiedzi<\/h2><h3>Od jakiej skali migracja jest uzasadniona?<\/h3><p>Nie istnieje uniwersalny pr\u00f3g miliona wierszy ani trzech filtr\u00f3w. Znaczenie maj\u0105 selektywno\u015b\u0107 zapyta\u0144, indeksy, sortowanie, sprz\u0119t i konkurencyjne operacje. Por\u00f3wnanie wymaga realistycznych odczyt\u00f3w i zapis\u00f3w oraz uwzgl\u0119dnienia koszt\u00f3w migracji i utrzymania.<\/p><h3>Czy nadal dzia\u0142a WP_Query?<\/h3><p>Ograniczone w\u0142asne zapytanie mo\u017ce przekaza\u0107 identyfikatory wpis\u00f3w przez <code>post__in<\/code>. Pusta lista musi ju\u017c w kodzie aplikacji da\u0107 pusty wynik: <code>post__in = []<\/code> nie oznacza \u201ebrak wpis\u00f3w\u201d. Status wpis\u00f3w, stronicowanie i kolejno\u015b\u0107 wymagaj\u0105 jawnych regu\u0142; <code>orderby = post__in<\/code> zachowuje przekazan\u0105 kolejno\u015b\u0107, gdy jest potrzebna. Du\u017ce listy identyfikator\u00f3w mog\u0105 by\u0107 kosztowne.<\/p><p>W\u0142asne pola nie uczestnicz\u0105 automatycznie w API metadanych, hookach ani uniewa\u017cnianiu pami\u0119ci podr\u0119cznej. Aktualizacje wymagaj\u0105 okre\u015blonej strategii cache. Usuwanie wpis\u00f3w, eksport i usuwanie danych osobowych, zakres multisite oraz retencja tak\u017ce wymagaj\u0105 integracji. Udokumentowane \u017ar\u00f3d\u0142o prawdy ogranicza niesp\u00f3jno\u015b\u0107 podw\u00f3jnych zapis\u00f3w.<\/p><\/div><div class=\"lw-quellen\"><h2>\u0179r\u00f3d\u0142a<\/h2><ul><li><a href=\"https:\/\/developer.wordpress.org\/plugins\/creating-tables-with-plugins\/\" target=\"_blank\" rel=\"noopener noreferrer\">creating tables with plugins<\/a><\/li><li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_meta_query\/find_compatible_table_alias\/\" target=\"_blank\" rel=\"noopener noreferrer\">find_compatible_table_alias<\/a><\/li><li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_metadata_raw\/\" target=\"_blank\" rel=\"noopener noreferrer\">get_metadata_raw<\/a><\/li><li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wpdb\/prepare\/\" target=\"_blank\" rel=\"noopener noreferrer\">prepare<\/a><\/li><li><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_query<\/a><\/li><li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/insert-on-duplicate.html\" target=\"_blank\" rel=\"noopener noreferrer\">MySQL: INSERT ON DUPLICATE KEY UPDATE<\/a><\/li><li><a href=\"https:\/\/mariadb.com\/docs\/server\/reference\/sql-statements\/data-manipulation\/inserting-loading-data\/insert-on-duplicate-key-update\" target=\"_blank\" rel=\"noopener noreferrer\">MariaDB: INSERT ON DUPLICATE KEY UPDATE<\/a><\/li><\/ul><\/div>","protected":false},"excerpt":{"rendered":"<p>Techniczny przewodnik po WordPress Database Hardening: rezygnacja z modelu EAV (wp_postmeta) na rzecz w\u0142asnych tabel relacyjnych MySQL i ON DUPLICATE KEY UPDATE.<\/p>\n","protected":false},"author":1,"featured_media":15244,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[152],"tags":[92262,92280,92283,92286],"class_list":["post-8842","post","type-post","status-publish","format-standard","hentry","category-tworzenie-stron-internetowych","tag-mysql-pl","tag-php-pl","tag-web-performance-pl","tag-wordpress-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"wp_postmeta i w\u0142asne tabele WordPressa: zapytania EAV, schematy relacyjne, indeksy i przygotowane zapytania SQL typu upsert.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"wp_postmeta i w\u0142asne tabele WordPressa: zapytania EAV, schematy relacyjne, indeksy i przygotowane zapytania SQL typu upsert.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T15:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-24T00:04:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8842-wordpress-database-hardening-wlasne--n.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel\",\"datePublished\":\"2026-08-21T15:50:00+00:00\",\"dateModified\":\"2026-10-24T00:04:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/\"},\"wordCount\":718,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8842-wordpress-database-hardening-wlasne--n.png\",\"keywords\":[\"MySQL\",\"PHP\",\"Web Performance\",\"WordPress\"],\"articleSection\":[\"Tworzenie stron internetowych\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/\",\"name\":\"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8842-wordpress-database-hardening-wlasne--n.png\",\"datePublished\":\"2026-08-21T15:50:00+00:00\",\"dateModified\":\"2026-10-24T00:04:21+00:00\",\"description\":\"wp_postmeta i w\u0142asne tabele WordPressa: zapytania EAV, schematy relacyjne, indeksy i przygotowane zapytania SQL typu upsert.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8842-wordpress-database-hardening-wlasne--n.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-8842-wordpress-database-hardening-wlasne--n.png\",\"width\":1200,\"height\":630,\"caption\":\"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/tworzenie-stron-internetowych\\\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel | Lukas Wojcik","description":"wp_postmeta i w\u0142asne tabele WordPressa: zapytania EAV, schematy relacyjne, indeksy i przygotowane zapytania SQL typu upsert.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/","og_locale":"en_US","og_type":"article","og_title":"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel | Lukas Wojcik","og_description":"wp_postmeta i w\u0142asne tabele WordPressa: zapytania EAV, schematy relacyjne, indeksy i przygotowane zapytania SQL typu upsert.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-21T15:50:00+00:00","article_modified_time":"2026-10-24T00:04:21+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8842-wordpress-database-hardening-wlasne--n.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel","datePublished":"2026-08-21T15:50:00+00:00","dateModified":"2026-10-24T00:04:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/"},"wordCount":718,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8842-wordpress-database-hardening-wlasne--n.png","keywords":["MySQL","PHP","Web Performance","WordPress"],"articleSection":["Tworzenie stron internetowych"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/","name":"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8842-wordpress-database-hardening-wlasne--n.png","datePublished":"2026-08-21T15:50:00+00:00","dateModified":"2026-10-24T00:04:21+00:00","description":"wp_postmeta i w\u0142asne tabele WordPressa: zapytania EAV, schematy relacyjne, indeksy i przygotowane zapytania SQL typu upsert.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8842-wordpress-database-hardening-wlasne--n.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-8842-wordpress-database-hardening-wlasne--n.png","width":1200,"height":630,"caption":"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/tworzenie-stron-internetowych\/baza-danych-wordpressa-ograniczenia-wydajnosci-wp_postmeta-i-budowa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Baza danych WordPressa: ograniczenia wydajno\u015bci wp_postmeta i budowa w\u0142asnych tabel"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=8842"}],"version-history":[{"count":7,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8842\/revisions"}],"predecessor-version":[{"id":23107,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/8842\/revisions\/23107"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/15244"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=8842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=8842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=8842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}