{"id":3478,"date":"2025-12-27T15:57:32","date_gmt":"2025-12-27T12:57:32","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/woocommerce-ve-buyuk-katalog-siteleri-icin-mysql-indeksleme-ve-sorgu-optimizasyonu-rehberi\/"},"modified":"2025-12-27T15:57:32","modified_gmt":"2025-12-27T12:57:32","slug":"woocommerce-ve-buyuk-katalog-siteleri-icin-mysql-indeksleme-ve-sorgu-optimizasyonu-rehberi","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/woocommerce-ve-buyuk-katalog-siteleri-icin-mysql-indeksleme-ve-sorgu-optimizasyonu-rehberi\/","title":{"rendered":"WooCommerce ve B\u00fcy\u00fck Katalog Siteleri \u0130\u00e7in MySQL \u0130ndeksleme ve Sorgu Optimizasyonu Rehberi"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#WooCommerce_ve_MySQL_Performansini_Dogru_Konumlandirmak\"><span class=\"toc_number toc_depth_1\">1<\/span> WooCommerce ve MySQL Performans\u0131n\u0131 Do\u011fru Konumland\u0131rmak<\/a><\/li><li><a href=\"#WooCommerce_ve_Buyuk_Kataloglarin_Veritabani_Desenini_Anlamak\"><span class=\"toc_number toc_depth_1\">2<\/span> WooCommerce ve B\u00fcy\u00fck Kataloglar\u0131n Veritaban\u0131 Desenini Anlamak<\/a><ul><li><a href=\"#Temel_WordPressWooCommerce_tablolari\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Temel WordPress\/WooCommerce tablolar\u0131<\/a><\/li><li><a href=\"#WooCommerce_sorgu_tipleri_ve_yuk_profili\"><span class=\"toc_number toc_depth_2\">2.2<\/span> WooCommerce sorgu tipleri ve y\u00fck profili<\/a><\/li><\/ul><\/li><li><a href=\"#Indeksleme_Temelleri_WooCommerce_Perspektifinden\"><span class=\"toc_number toc_depth_1\">3<\/span> \u0130ndeksleme Temelleri: WooCommerce Perspektifinden<\/a><ul><li><a href=\"#Esitlik_ve_aralik_sartlari_icin_dogru_siralama\"><span class=\"toc_number toc_depth_2\">3.1<\/span> E\u015fitlik ve aral\u0131k \u015fartlar\u0131 i\u00e7in do\u011fru s\u0131ralama<\/a><\/li><li><a href=\"#WooCommerce_icin_tipik_indeks_ihtiyaclari\"><span class=\"toc_number toc_depth_2\">3.2<\/span> WooCommerce i\u00e7in tipik indeks ihtiya\u00e7lar\u0131<\/a><ul><li><a href=\"#wp_posts_icin_indeksler\"><span class=\"toc_number toc_depth_3\">3.2.1<\/span> wp_posts i\u00e7in indeksler<\/a><\/li><li><a href=\"#wp_postmeta_icin_indeksler\"><span class=\"toc_number toc_depth_3\">3.2.2<\/span> wp_postmeta i\u00e7in indeksler<\/a><\/li><li><a href=\"#Taksonomi_tablolari_icin_indeksler\"><span class=\"toc_number toc_depth_3\">3.2.3<\/span> Taksonomi tablolar\u0131 i\u00e7in indeksler<\/a><\/li><\/ul><\/li><\/ul><\/li><li><a href=\"#EXPLAIN_ile_Sorgu_Planini_Okumayi_Ogrenmek\"><span class=\"toc_number toc_depth_1\">4<\/span> EXPLAIN ile Sorgu Plan\u0131n\u0131 Okumay\u0131 \u00d6\u011frenmek<\/a><ul><li><a href=\"#EXPLAIN_nasil_kullanilir\"><span class=\"toc_number toc_depth_2\">4.1<\/span> EXPLAIN nas\u0131l kullan\u0131l\u0131r?<\/a><\/li><li><a href=\"#Ornek_Fiyat_filtresi_yavasligi\"><span class=\"toc_number toc_depth_2\">4.2<\/span> \u00d6rnek: Fiyat filtresi yava\u015fl\u0131\u011f\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Buyuk_Kataloglarda_Tipik_Yavas_Sorgular_ve_Cozumleri\"><span class=\"toc_number toc_depth_1\">5<\/span> B\u00fcy\u00fck Kataloglarda Tipik Yava\u015f Sorgular ve \u00c7\u00f6z\u00fcmleri<\/a><ul><li><a href=\"#1_Kategori_fiyat_attribute_filtreleri\"><span class=\"toc_number toc_depth_2\">5.1<\/span> 1. Kategori + fiyat + attribute filtreleri<\/a><\/li><li><a href=\"#2_Varyasyonlu_urunlerin_sisirdigi_sorgular\"><span class=\"toc_number toc_depth_2\">5.2<\/span> 2. Varyasyonlu \u00fcr\u00fcnlerin \u015fi\u015firdi\u011fi sorgular<\/a><\/li><li><a href=\"#3_Stok_ve_kampanya_cron_gorevleri\"><span class=\"toc_number toc_depth_2\">5.3<\/span> 3. Stok ve kampanya cron g\u00f6revleri<\/a><\/li><li><a href=\"#4_Yonetim_paneli_raporlari\"><span class=\"toc_number toc_depth_2\">5.4<\/span> 4. Y\u00f6netim paneli raporlar\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Sorgu_Optimizasyonu_Sadece_Indeks_Degil\"><span class=\"toc_number toc_depth_1\">6<\/span> Sorgu Optimizasyonu: Sadece \u0130ndeks De\u011fil<\/a><ul><li><a href=\"#SELECT_yerine_hedefe_yonelik_kolon_secimi\"><span class=\"toc_number toc_depth_2\">6.1<\/span> SELECT * yerine hedefe y\u00f6nelik kolon se\u00e7imi<\/a><\/li><li><a href=\"#LIMIT_OFFSET_yerine_seek_pagination\"><span class=\"toc_number toc_depth_2\">6.2<\/span> LIMIT + OFFSET yerine seek pagination<\/a><\/li><li><a href=\"#COUNT_ve_istatistik_sorgularini_hafifletmek\"><span class=\"toc_number toc_depth_2\">6.3<\/span> COUNT(*) ve istatistik sorgular\u0131n\u0131 hafifletmek<\/a><\/li><li><a href=\"#Denormalizasyon_ve_ozet_tablolar\"><span class=\"toc_number toc_depth_2\">6.4<\/span> Denormalizasyon ve \u00f6zet tablolar<\/a><\/li><\/ul><\/li><li><a href=\"#MySQL_Sunucu_Ayarlari_ve_Altyapi_Etkisi\"><span class=\"toc_number toc_depth_1\">7<\/span> MySQL Sunucu Ayarlar\u0131 ve Altyap\u0131 Etkisi<\/a><\/li><li><a href=\"#Izleme_Slow_Query_Log_ve_Guvenli_Degisiklik_Sureci\"><span class=\"toc_number toc_depth_1\">8<\/span> \u0130zleme, Slow Query Log ve G\u00fcvenli De\u011fi\u015fiklik S\u00fcreci<\/a><ul><li><a href=\"#Slow_query_log_kullanimi\"><span class=\"toc_number toc_depth_2\">8.1<\/span> Slow query log kullan\u0131m\u0131<\/a><\/li><li><a href=\"#Test_ortami_ve_sema_degisiklikleri\"><span class=\"toc_number toc_depth_2\">8.2<\/span> Test ortam\u0131 ve \u015fema de\u011fi\u015fiklikleri<\/a><\/li><\/ul><\/li><li><a href=\"#DCHost_Altyapisinda_WooCommerce_ve_MySQL_Icin_Yol_Haritasi\"><span class=\"toc_number toc_depth_1\">9<\/span> DCHost Altyap\u0131s\u0131nda WooCommerce ve MySQL \u0130\u00e7in Yol Haritas\u0131<\/a><\/li><li><a href=\"#Ozet_ve_Uygulanabilir_Yol_Haritasi\"><span class=\"toc_number toc_depth_1\">10<\/span> \u00d6zet ve Uygulanabilir Yol Haritas\u0131<\/a><\/li><\/ul><\/div>\n<h2><span id=\"WooCommerce_ve_MySQL_Performansini_Dogru_Konumlandirmak\">WooCommerce ve MySQL Performans\u0131n\u0131 Do\u011fru Konumland\u0131rmak<\/span><\/h2>\n<p>WooCommerce ile \u00e7al\u0131\u015fan ve on binlerce hatta y\u00fcz binlerce \u00fcr\u00fcne sahip bir e-ticaret sitesinde performans sorunu ya\u015fand\u0131\u011f\u0131nda su\u00e7 genellikle hemen sunucuya ya da WordPress \u00e7ekirde\u011fine at\u0131l\u0131r. Oysa sahada g\u00f6rd\u00fc\u011f\u00fcm\u00fcz tablo \u00e7o\u011fu zaman farkl\u0131: Sorunlar\u0131n \u00f6nemli bir k\u0131sm\u0131 MySQL taraf\u0131nda yanl\u0131\u015f veya eksik <strong>indeksleme<\/strong>, k\u00f6t\u00fc yaz\u0131lm\u0131\u015f sorgular ve plans\u0131z b\u00fcy\u00fcyen katalog yap\u0131s\u0131ndan kaynaklan\u0131yor. Ayn\u0131 donan\u0131m \u00fczerinde, do\u011fru optimize edilmi\u015f bir veritaban\u0131 ile saniyede iki kat daha fazla istek cevaplayabilen WooCommerce kurulumlar\u0131 g\u00f6rmek m\u00fcmk\u00fcn.<\/p>\n<p>Bu rehberde DCHost ekibi olarak, \u00f6zellikle b\u00fcy\u00fck \u00fcr\u00fcn kataloglar\u0131na sahip WooCommerce sitelerinde MySQL taraf\u0131nda neleri do\u011fru yapman\u0131z gerekti\u011fini ad\u0131m ad\u0131m ele alaca\u011f\u0131z. Hangi tablolar kritik, hangi kolonlara nas\u0131l indeks a\u00e7\u0131lmal\u0131, <strong>EXPLAIN<\/strong> \u00e7\u0131kt\u0131s\u0131n\u0131 nas\u0131l okumal\u0131, yava\u015f sorgular\u0131 nas\u0131l te\u015fhis etmelisiniz gibi pratik konulara odaklanaca\u011f\u0131z. Ama\u00e7; teorik bilgi y\u0131\u011f\u0131n\u0131 de\u011fil, do\u011frudan sahada uygulayabilece\u011finiz, WooCommerce ma\u011fazan\u0131z\u0131n h\u0131z\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini hissedilir \u015fekilde art\u0131racak somut bir yol haritas\u0131 sunmak.<\/p>\n<h2><span id=\"WooCommerce_ve_Buyuk_Kataloglarin_Veritabani_Desenini_Anlamak\">WooCommerce ve B\u00fcy\u00fck Kataloglar\u0131n Veritaban\u0131 Desenini Anlamak<\/span><\/h2>\n<p>\u0130ndeksleme ve sorgu optimizasyonuna ge\u00e7meden \u00f6nce WooCommerce&#8217;in MySQL taraf\u0131nda nas\u0131l bir veri modeli kulland\u0131\u011f\u0131n\u0131 netle\u015ftirmek gerekiyor. \u00d6zellikle b\u00fcy\u00fck kataloglarda, yanl\u0131\u015f tasarlanm\u0131\u015f meta alanlar\u0131 ve plans\u0131z veritaban\u0131 b\u00fcy\u00fcmesi \u00e7ok h\u0131zl\u0131 \u015fekilde darbo\u011faza d\u00f6n\u00fc\u015febiliyor.<\/p>\n<h3><span id=\"Temel_WordPressWooCommerce_tablolari\">Temel WordPress\/WooCommerce tablolar\u0131<\/span><\/h3>\n<p>WooCommerce, WordPress&#8217;in standart tablo yap\u0131s\u0131n\u0131 kullan\u0131r ve \u00fczerine birka\u00e7 ek tablo ekler. En \u00e7ok sorgulanan tablolar \u00f6zetle \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>wp_posts<\/strong>: \u00dcr\u00fcnler de dahil olmak \u00fczere t\u00fcm i\u00e7erikler burada tutulur (post_type = &#8216;product&#8217;, &#8216;product_variation&#8217; vb.).<\/li>\n<li><strong>wp_postmeta<\/strong>: \u00dcr\u00fcn fiyat\u0131, stok bilgisi, \u00f6zel alanlar gibi meta veriler burada saklan\u0131r.<\/li>\n<li><strong>wp_terms, wp_term_taxonomy, wp_term_relationships<\/strong>: Kategoriler, etiketler ve \u00fcr\u00fcn \u00f6zellikleri (attributes) i\u00e7in kullan\u0131lan taksonomi tablolar\u0131.<\/li>\n<li><strong>wc_order_*<\/strong> tablolar\u0131: Sipari\u015fler i\u00e7in WooCommerce&#8217;in yeni nesil \u00f6zel tablolar\u0131 (yeni kurulumlarda giderek daha fazla kullan\u0131l\u0131yor).<\/li>\n<\/ul>\n<p>Burada en kritik nokta, \u00fcr\u00fcn kataloglar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e <strong>wp_postmeta<\/strong> ve taksonomi tablolar\u0131n\u0131n \u00e7ok h\u0131zl\u0131 \u015fi\u015fmesidir. Bir \u00fcr\u00fcn ba\u015f\u0131na 30\u201340 meta kayd\u0131 oldu\u011funu varsayarsak, 100.000 \u00fcr\u00fcn i\u00e7in 3\u20134 milyon sat\u0131rl\u0131k bir postmeta tablosu g\u00f6rmek hi\u00e7 \u015fa\u015f\u0131rt\u0131c\u0131 de\u011fildir.<\/p>\n<h3><span id=\"WooCommerce_sorgu_tipleri_ve_yuk_profili\">WooCommerce sorgu tipleri ve y\u00fck profili<\/span><\/h3>\n<p>B\u00fcy\u00fck kataloglarda MySQL&#8217;e binen y\u00fck\u00fc anlamak i\u00e7in hangi sorgu tiplerinin \u00f6ne \u00e7\u0131kt\u0131\u011f\u0131na bakal\u0131m:<\/p>\n<ul>\n<li><strong>Listeleme ve kategori sayfalar\u0131<\/strong>: post_type, kategori, fiyat aral\u0131\u011f\u0131 ve attribute filtreleriyle karma\u015f\u0131k JOIN ve WHERE \u015fartlar\u0131.<\/li>\n<li><strong>Site i\u00e7i arama<\/strong>: Ba\u015fl\u0131k, i\u00e7erik ve \u00e7o\u011fu zaman meta de\u011ferlerine g\u00f6re LIKE aramalar\u0131.<\/li>\n<li><strong>\u00dcr\u00fcn detay\u0131<\/strong>: Tek \u00fcr\u00fcn i\u00e7in postmeta, taksonomi ve varyasyon sorgular\u0131.<\/li>\n<li><strong>Sepet ve \u00f6deme ad\u0131m\u0131<\/strong>: Stok, fiyat ve kupon kontrol\u00fc gibi s\u0131k tekrarlanan sorgular.<\/li>\n<li><strong>Y\u00f6netim ve raporlama<\/strong>: Sipari\u015fler, sat\u0131\u015f raporlar\u0131, stok raporlar\u0131 gibi a\u011f\u0131r sorgular.<\/li>\n<\/ul>\n<p>Bu sorgular\u0131n her biri farkl\u0131 indeksleme stratejileri gerektirir. \u00d6zellikle kategori + fiyat + attribute kombinasyonlu filtrelerde yanl\u0131\u015f veya eksik indeks, CPU&#8217;yu t\u00fcketen ve saniyeler s\u00fcren sorgulara yol a\u00e7ar.<\/p>\n<p>Veritaban\u0131 taraf\u0131ndaki genel ayarlar i\u00e7in, daha \u00f6nce haz\u0131rlad\u0131\u011f\u0131m\u0131z <a href='https:\/\/www.dchost.com\/blog\/woocommerce-icin-mysql-innodb-tuning-kontrol-listesi-buffer-pool-indeksleme-ve-slow-query-analizi-nasil-akillica-yapilir\/'>WooCommerce i\u00e7in MySQL\/InnoDB tuning kontrol listesi<\/a> rehberine de g\u00f6z atman\u0131z faydal\u0131 olacakt\u0131r.<\/p>\n<h2><span id=\"Indeksleme_Temelleri_WooCommerce_Perspektifinden\">\u0130ndeksleme Temelleri: WooCommerce Perspektifinden<\/span><\/h2>\n<p>\u0130ndeks; bir tablonun belirli kolonlar\u0131 \u00fczerinde olu\u015fturulan, aramay\u0131 h\u0131zland\u0131ran \u00f6zel bir veri yap\u0131s\u0131d\u0131r. MySQL taraf\u0131nda \u00e7o\u011funlukla <strong>BTREE<\/strong> indekslerle \u00e7al\u0131\u015f\u0131r\u0131z. WooCommerce&#8217;de indeksleri do\u011fru kullanmak i\u00e7in \u00fc\u00e7 temel kavram\u0131 netle\u015ftirelim:<\/p>\n<ul>\n<li><strong>Se\u00e7icilik (selectivity)<\/strong>: Bir kolonun ka\u00e7 farkl\u0131 de\u011fer i\u00e7erdi\u011fi. Ne kadar \u00e7ok farkl\u0131 de\u011fer varsa, indeks o kadar verimli olur.<\/li>\n<li><strong>Bile\u015fik (composite) indeks<\/strong>: Birden fazla kolondan olu\u015fan indeks. \u00d6rne\u011fin (post_type, post_status, post_date).<\/li>\n<li><strong>Kaplayan (covering) indeks<\/strong>: Sorgunun ihtiya\u00e7 duydu\u011fu t\u00fcm kolonlar\u0131n indeks i\u00e7inde olmas\u0131. B\u00f6ylece tabloya geri d\u00f6nmeye (&#8220;back to table&#8221;) gerek kalmaz.<\/li>\n<\/ul>\n<h3><span id=\"Esitlik_ve_aralik_sartlari_icin_dogru_siralama\">E\u015fitlik ve aral\u0131k \u015fartlar\u0131 i\u00e7in do\u011fru s\u0131ralama<\/span><\/h3>\n<p>Bile\u015fik bir indeks tasarlarken sorgunun WHERE ko\u015fullar\u0131n\u0131 iyi okumak gerekir:<\/p>\n<ul>\n<li>E\u015fitlik filtreleri (=) en ba\u015fta yer almal\u0131 (\u00f6r: post_type, post_status).<\/li>\n<li>Aral\u0131k ko\u015fullar\u0131 (&gt;, &lt;, BETWEEN) genelde daha sonra gelir (\u00f6r: post_date, fiyat).<\/li>\n<li>LIKE aramalar\u0131, e\u011fer joker karakterle ba\u015flam\u0131yorsa (value% gibi) indeksten faydalanabilir.<\/li>\n<\/ul>\n<p>\u00d6rne\u011fin, \u00fcr\u00fcnleri sadece <strong>yay\u0131nda olan<\/strong> ve <strong>product<\/strong> tipinde olanlar\u0131 tarihine g\u00f6re listelemek istiyorsan\u0131z, (post_type, post_status, post_date) \u015feklinde bir bile\u015fik indeks, (post_date, post_type, post_status) indeksine g\u00f6re \u00e7ok daha verimli olacakt\u0131r.<\/p>\n<h3><span id=\"WooCommerce_icin_tipik_indeks_ihtiyaclari\">WooCommerce i\u00e7in tipik indeks ihtiya\u00e7lar\u0131<\/span><\/h3>\n<p>Pratikte b\u00fcy\u00fck WooCommerce kataloglar\u0131nda s\u0131k\u00e7a ekledi\u011fimiz baz\u0131 indeks \u00f6rneklerini payla\u015fal\u0131m. Not: Tablonuzun \u00f6neki wp_ olmayabilir; buna g\u00f6re uyarlay\u0131n.<\/p>\n<h4><span id=\"wp_posts_icin_indeksler\">wp_posts i\u00e7in indeksler<\/span><\/h4>\n<p>\u00dcr\u00fcn ve varyasyonlar\u0131n listelenmesinde en s\u0131k kullan\u0131lan alanlar post_type, post_status ve post_date&#8217;tir. \u015eu bile\u015fik indeks genelde ciddi fayda sa\u011flar:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">ALTER TABLE wp_posts \nADD INDEX idx_posts_type_status_date (post_type, post_status, post_date DESC);\n<\/code><\/pre>\n<p>Kategori sayfalar\u0131, en \u00e7ok satanlar, yeni gelenler gibi listelemelerde bu indeks genellikle sorgu plan\u0131n\u0131 iyile\u015ftirir.<\/p>\n<h4><span id=\"wp_postmeta_icin_indeksler\">wp_postmeta i\u00e7in indeksler<\/span><\/h4>\n<p>WooCommerce&#8217;de fiyat, stok, SKU gibi kritik bilgiler postmeta tablosundad\u0131r. \u00c7o\u011fu sorgu \u015fu paterni kullan\u0131r:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">WHERE post_id IN (...) \n  AND meta_key = '_price' \n  AND meta_value BETWEEN 100 AND 200\n<\/code><\/pre>\n<p>Burada sadece (post_id) veya (meta_key) \u00fczerinde indeks olmas\u0131 yetmez. Genelde \u015fu iki indeksin ikisi birden i\u015fe yarar:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">ALTER TABLE wp_postmeta \nADD INDEX idx_postmeta_postid_metakey (post_id, meta_key),\nADD INDEX idx_postmeta_metakey_value (meta_key, meta_value(20));\n<\/code><\/pre>\n<p>meta_value alan\u0131 \u00e7o\u011fu zaman TEXT t\u00fcr\u00fcnde oldu\u011fundan, indekste prefix (\u00f6rnekte 20 karakter) kullanmak gerekir. Fiyat gibi say\u0131sal alanlar\u0131 m\u00fcmk\u00fcn oldu\u011funca <strong>DECIMAL<\/strong> gibi say\u0131sal s\u00fctunlara ta\u015f\u0131mak ve metada saklamamak da uzun vadede b\u00fcy\u00fck avantaj sa\u011flar.<\/p>\n<h4><span id=\"Taksonomi_tablolari_icin_indeksler\">Taksonomi tablolar\u0131 i\u00e7in indeksler<\/span><\/h4>\n<p>Kategori ve attribute filtreleri, \u00f6zellikle b\u00fcy\u00fck kataloglarda a\u011f\u0131rla\u015f\u0131r. WooCommerce&#8217;in yo\u011fun kulland\u0131\u011f\u0131 ba\u011flant\u0131lar genelde \u015fu \u015fekildedir:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">wp_term_relationships (object_id, term_taxonomy_id)\nwp_term_taxonomy (term_taxonomy_id, taxonomy)\n<\/code><\/pre>\n<p>Genellikle \u015fu indeksler hayat kurtar\u0131r:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">ALTER TABLE wp_term_relationships \nADD INDEX idx_tr_object_term (object_id, term_taxonomy_id);\n\nALTER TABLE wp_term_taxonomy \nADD INDEX idx_tt_taxonomy (taxonomy, term_id);\n<\/code><\/pre>\n<h2><span id=\"EXPLAIN_ile_Sorgu_Planini_Okumayi_Ogrenmek\">EXPLAIN ile Sorgu Plan\u0131n\u0131 Okumay\u0131 \u00d6\u011frenmek<\/span><\/h2>\n<p>\u0130yi bir indeks tasar\u0131m\u0131 yapman\u0131n tek yolu, MySQL&#8217;in sorgular\u0131n\u0131z\u0131 nas\u0131l \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131 anlamakt\u0131r. Bunun i\u00e7in en temel ara\u00e7 <strong>EXPLAIN<\/strong> komutudur.<\/p>\n<h3><span id=\"EXPLAIN_nasil_kullanilir\">EXPLAIN nas\u0131l kullan\u0131l\u0131r?<\/span><\/h3>\n<p>Herhangi bir SELECT sorgusunun ba\u015f\u0131na EXPLAIN ekleyerek MySQL&#8217;in sorgu plan\u0131n\u0131 g\u00f6rebilirsiniz:<\/p>\n<pre class=\"language-sql line-numbers\"><code class=\"language-sql\">EXPLAIN SELECT * \nFROM wp_postmeta \nWHERE meta_key = '_price' \n  AND meta_value BETWEEN 100 AND 200;\n<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da en \u00e7ok dikkat etmeniz gereken s\u00fctunlar:<\/p>\n<ul>\n<li><strong>type<\/strong>: ref, range, ALL gibi de\u011ferler. ALL genelde full table scan anlam\u0131na gelir ve ka\u00e7\u0131n\u0131lmal\u0131d\u0131r.<\/li>\n<li><strong>key<\/strong>: MySQL&#8217;in kulland\u0131\u011f\u0131 indeks. NULL ise indeks kullanm\u0131yordur.<\/li>\n<li><strong>rows<\/strong>: MySQL&#8217;in tahmini olarak ka\u00e7 sat\u0131r tarayaca\u011f\u0131. M\u00fcmk\u00fcn oldu\u011funca d\u00fc\u015f\u00fck olmal\u0131.<\/li>\n<li><strong>Extra<\/strong>: &#8220;Using where&#8221;, &#8220;Using filesort&#8221;, &#8220;Using temporary&#8221; gibi ifadeler performans hakk\u0131nda ipucu verir.<\/li>\n<\/ul>\n<h3><span id=\"Ornek_Fiyat_filtresi_yavasligi\">\u00d6rnek: Fiyat filtresi yava\u015fl\u0131\u011f\u0131<\/span><\/h3>\n<p>Ger\u00e7ek bir senaryodan sadele\u015ftirilmi\u015f bir \u00f6rnek d\u00fc\u015f\u00fcnelim. B\u00fcy\u00fck bir katalogda, ziyaret\u00e7i kategori sayfas\u0131nda fiyat filtresi kulland\u0131\u011f\u0131nda sorgu 2\u20133 saniye s\u00fcr\u00fcyor olsun. EXPLAIN \u00e7\u0131kt\u0131s\u0131nda \u015funu g\u00f6r\u00fcyoruz:<\/p>\n<ul>\n<li>Tablo: wp_postmeta<\/li>\n<li>type: ALL<\/li>\n<li>key: NULL<\/li>\n<li>rows: 3.000.000<\/li>\n<li>Extra: Using where; Using temporary; Using filesort<\/li>\n<\/ul>\n<p>Bu, MySQL&#8217;in t\u00fcm postmeta tablosunu tarad\u0131\u011f\u0131n\u0131, sonu\u00e7lar\u0131 ge\u00e7ici tabloda tuttu\u011funu ve ekstra s\u0131ralama yapt\u0131\u011f\u0131n\u0131 g\u00f6sterir. Bir \u00f6nceki b\u00f6l\u00fcmdeki <code>idx_postmeta_metakey_value<\/code> indeksi eklendikten sonra ayn\u0131 sorgunun EXPLAIN \u00e7\u0131kt\u0131s\u0131 \u015f\u00f6yle g\u00f6r\u00fcnmeye ba\u015flar:<\/p>\n<ul>\n<li>type: range<\/li>\n<li>key: idx_postmeta_metakey_value<\/li>\n<li>rows: 15.000<\/li>\n<li>Extra: Using where<\/li>\n<\/ul>\n<p>Tarad\u0131\u011f\u0131 sat\u0131r say\u0131s\u0131 3 milyon yerine 15 bin civar\u0131na inmi\u015f olur. Ger\u00e7ek d\u00fcnyada bu, 2\u20133 saniyelik sorgunun 100\u2013200 ms seviyesine d\u00fc\u015fmesi anlam\u0131na gelir.<\/p>\n<h2><span id=\"Buyuk_Kataloglarda_Tipik_Yavas_Sorgular_ve_Cozumleri\">B\u00fcy\u00fck Kataloglarda Tipik Yava\u015f Sorgular ve \u00c7\u00f6z\u00fcmleri<\/span><\/h2>\n<p>Sahada WooCommerce ma\u011fazalar\u0131nda en s\u0131k kar\u015f\u0131m\u0131za \u00e7\u0131kan yava\u015f sorgu tiplerini ve bunlara kar\u015f\u0131 uygulad\u0131\u011f\u0131m\u0131z \u00e7\u00f6z\u00fcmleri \u00f6zetleyelim.<\/p>\n<h3><span id=\"1_Kategori_fiyat_attribute_filtreleri\">1. Kategori + fiyat + attribute filtreleri<\/span><\/h3>\n<p>Ziyaret\u00e7i; kategori sayfas\u0131nda belirli bir fiyat aral\u0131\u011f\u0131 ve birden fazla attribute se\u00e7ti\u011finde, WordPress taraf\u0131 genellikle karma\u015f\u0131k bir JOIN yap\u0131s\u0131 \u00fcretir. Bu sorgular:<\/p>\n<ul>\n<li>wp_posts \u00fczerinde post_type, post_status ve post_date filtreleri,<\/li>\n<li>wp_term_relationships ve wp_term_taxonomy ile kategori\/attribute filtreleri,<\/li>\n<li>wp_postmeta \u00fczerinden fiyat ve stok filtreleri<\/li>\n<\/ul>\n<p>i\u00e7erir. Sorunlar \u00e7o\u011fu zaman \u015furalarda \u00e7\u0131kar:<\/p>\n<ul>\n<li>term_relationships tablosunda (object_id, term_taxonomy_id) bile\u015fik indeks eksikli\u011fi,<\/li>\n<li>postmeta \u00fczerinde hem post_id hem meta_key&#8217;e g\u00f6re sorgularken yetersiz indeks,<\/li>\n<li>LIMIT + OFFSET ile derin sayfalara gitmek (\u00f6r. sayfa 50, OFFSET 2400).<\/li>\n<\/ul>\n<p>\u00c7\u00f6z\u00fcmler:<\/p>\n<ul>\n<li>Yukar\u0131da \u00f6nerdi\u011fimiz bile\u015fik indeksleri eklemek.<\/li>\n<li>Derin sayfalarda OFFSET yerine <strong>seek pagination<\/strong> (son \u00fcr\u00fcn ID&#8217;sine g\u00f6re devam eden sayfalama) tasarlamak.<\/li>\n<li>Attribute filtreleri i\u00e7in m\u00fcmk\u00fcnse ayr\u0131, daha sade bir indeks tablosu kurgulamak (\u00f6rne\u011fin \u00fcr\u00fcn-id + facet de\u011ferleri).<\/li>\n<\/ul>\n<h3><span id=\"2_Varyasyonlu_urunlerin_sisirdigi_sorgular\">2. Varyasyonlu \u00fcr\u00fcnlerin \u015fi\u015firdi\u011fi sorgular<\/span><\/h3>\n<p>Her varyasyonun ayr\u0131 bir post (product_variation) olarak tutulmas\u0131, b\u00fcy\u00fck kataloglarda wp_posts ve wp_postmeta \u00fczerinde ciddi y\u00fck olu\u015fturur. \u00d6rne\u011fin 1 ana \u00fcr\u00fcn + 100 varyasyon = 101 sat\u0131r ve y\u00fczlerce meta kayd\u0131 demektir.<\/p>\n<p>\u00c7\u00f6z\u00fcmler:<\/p>\n<ul>\n<li>Varyasyon verilerini \u00e7ekerken SELECT * yerine sadece gerekli alanlar\u0131 se\u00e7mek.<\/li>\n<li>Varyasyon meta verilerinde s\u0131k kullan\u0131lan alanlar i\u00e7in (post_id, meta_key) bile\u015fik indeksleri kontrol etmek.<\/li>\n<li>\u00dcr\u00fcn listeleme sorgular\u0131nda varyasyonlar\u0131 m\u00fcmk\u00fcn oldu\u011funca d\u0131\u015far\u0131da b\u0131rakmak, sadece ana \u00fcr\u00fcnler \u00fczerinden filtreleme yapmak.<\/li>\n<\/ul>\n<h3><span id=\"3_Stok_ve_kampanya_cron_gorevleri\">3. Stok ve kampanya cron g\u00f6revleri<\/span><\/h3>\n<p>WooCommerce, stok g\u00fcncelleme, kampanya ba\u015flang\u0131\u00e7\/biti\u015f kontrol\u00fc, sepet temizleme gibi i\u015fleri cron g\u00f6revleriyle y\u00fcr\u00fct\u00fcr. \u00d6zellikle \u00e7ok say\u0131da \u00fcr\u00fcn i\u00e7in stok senkronizasyonu yapan entegrasyonlarda, arka planda \u00e7al\u0131\u015fan sorgular\u0131n indekslenmemi\u015f olmas\u0131 hem cron s\u00fcre\u00e7lerini yava\u015flat\u0131r hem de son kullan\u0131c\u0131 sorgular\u0131n\u0131 etkiler.<\/p>\n<p>\u00c7\u00f6z\u00fcmler:<\/p>\n<ul>\n<li>Stok ve fiyat g\u00fcncelleme sorgular\u0131n\u0131 inceleyip, WHERE ko\u015fullar\u0131na uygun indeksler olu\u015fturmak.<\/li>\n<li>Toplu UPDATE\/DELETE i\u015flemlerini k\u00fc\u00e7\u00fck par\u00e7alara b\u00f6lmek (\u00f6rne\u011fin LIMIT 1000 ile ad\u0131m ad\u0131m).<\/li>\n<li>Yo\u011fun cron s\u00fcre\u00e7lerini trafik d\u0131\u015f\u0131 saatlere kayd\u0131rmak ve gerekti\u011finde ayr\u0131 bir veritaban\u0131 replikas\u0131nda \u00e7al\u0131\u015ft\u0131rmak.<\/li>\n<\/ul>\n<p>Veritaban\u0131n\u0131 ayr\u0131 bir sunucuya ta\u015f\u0131man\u0131n mant\u0131kl\u0131 oldu\u011fu e\u015fi\u011fi tart\u0131\u015ft\u0131\u011f\u0131m\u0131z <a href='https:\/\/www.dchost.com\/blog\/woocommerce-icin-ayri-veritabani-ve-onbellek-sunucusu-ne-zaman-mantikli\/'>WooCommerce i\u00e7in ayr\u0131 veritaban\u0131 ve \u00f6nbellek sunucusu ne zaman mant\u0131kl\u0131<\/a> yaz\u0131m\u0131z\u0131 da bu noktada okuman\u0131z\u0131 \u00f6neririz.<\/p>\n<h3><span id=\"4_Yonetim_paneli_raporlari\">4. Y\u00f6netim paneli raporlar\u0131<\/span><\/h3>\n<p>WooCommerce rapor ekranlar\u0131, \u00f6zellikle tarih aral\u0131\u011f\u0131 geni\u015f olan sipari\u015f ve sat\u0131\u015f istatistikleri istendi\u011finde a\u011f\u0131r sorgular \u00fcretir. \u00c7o\u011fu zaman:<\/p>\n<ul>\n<li>Geni\u015f tarih aral\u0131klar\u0131nda COUNT, SUM gibi toplama fonksiyonlar\u0131,<\/li>\n<li>Sipari\u015f tablosu ile meta tablolar aras\u0131nda birden \u00e7ok JOIN,<\/li>\n<li>\u0130ndekslenmemi\u015f tarih ve durum filtreleri<\/li>\n<\/ul>\n<p>g\u00f6r\u00fcr\u00fcz. Y\u00f6netim aray\u00fcz\u00fc, ger\u00e7ek kullan\u0131c\u0131 taraf\u0131ndaki performans\u0131 do\u011frudan etkilemese de, ayn\u0131 veritaban\u0131 sunucusunu kulland\u0131\u011f\u0131 i\u00e7in anl\u0131k CPU ve IO patlamalar\u0131na neden olabilir.<\/p>\n<p>\u00c7\u00f6z\u00fcmler:<\/p>\n<ul>\n<li>Sipari\u015f tablolar\u0131nda (status, date_created) gibi alanlar i\u00e7in bile\u015fik indeksler olu\u015fturmak.<\/li>\n<li>\u00c7ok s\u0131k kullan\u0131lan raporlar i\u00e7in \u00f6zet (aggregate) tablolar kurup, cron ile bu tablolar\u0131 g\u00fcncel tutmak.<\/li>\n<li>Gerekirse raporlar\u0131 okuma replikas\u0131 (read replica) \u00fczerinde ko\u015fturmak. Bu mimariyi ele ald\u0131\u011f\u0131m\u0131z <a href='https:\/\/www.dchost.com\/blog\/proxysql-ile-mysql-read-write-split-ve-baglanti-havuzu-woocommerce-laravel-icin-gercek-dunya-rehberi\/'>ProxySQL ile MySQL read\/write split rehberimiz<\/a> bu konuda iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<h2><span id=\"Sorgu_Optimizasyonu_Sadece_Indeks_Degil\">Sorgu Optimizasyonu: Sadece \u0130ndeks De\u011fil<\/span><\/h2>\n<p>\u0130ndeksler \u00e7ok \u00f6nemlidir ama tek ba\u015f\u0131na yeterli de\u011fildir. Ayn\u0131 k\u00f6t\u00fc yaz\u0131lm\u0131\u015f sorguya 5 farkl\u0131 indeks eklemek yerine, sorguyu do\u011fru kurgulamak \u00e7o\u011fu zaman daha b\u00fcy\u00fck kazan\u0131m sa\u011flar.<\/p>\n<h3><span id=\"SELECT_yerine_hedefe_yonelik_kolon_secimi\">SELECT * yerine hedefe y\u00f6nelik kolon se\u00e7imi<\/span><\/h3>\n<p>WooCommerce tema ve eklentilerinde s\u0131k g\u00f6rd\u00fc\u011f\u00fcm\u00fcz bir hata: Her yerde SELECT * kullanmak. \u00d6zellikle postmeta gibi geni\u015f tablolarda bu, gereksiz IO anlam\u0131na gelir. \u00d6rne\u011fin listeleme sorgusunda sadece ID, post_title ve post_date gerekiyorsa:<\/p>\n<pre class=\"language-sql line-numbers\"><code class=\"language-sql\">SELECT ID, post_title, post_date \nFROM wp_posts \nWHERE post_type = 'product' AND post_status = 'publish'\nORDER BY post_date DESC \nLIMIT 20;\n<\/code><\/pre>\n<p>\u015feklinde daralt\u0131lm\u0131\u015f bir sorgu, hem indekslerin daha verimli kullan\u0131lmas\u0131n\u0131 sa\u011flar hem de bellek kullan\u0131m\u0131n\u0131 azalt\u0131r.<\/p>\n<h3><span id=\"LIMIT_OFFSET_yerine_seek_pagination\">LIMIT + OFFSET yerine seek pagination<\/span><\/h3>\n<p>B\u00fcy\u00fck kataloglarda sayfa 1\u20133 genelde sorun olmaz ama 30\u201340. sayfalara gidildi\u011finde OFFSET de\u011feri b\u00fcy\u00fcd\u00fc\u011f\u00fc i\u00e7in MySQL y\u00fczlerce bin sat\u0131r\u0131 taramak zorunda kal\u0131r. Bunun yerine ID veya tarih bazl\u0131 &#8220;seek pagination&#8221; kullanmak daha iyidir:<\/p>\n<ul>\n<li>\u0130lk sorguda son \u00fcr\u00fcn ID&#8217;sini al\u0131n.<\/li>\n<li>Sonraki sayfa i\u00e7in WHERE ID &lt; son_id AND LIMIT 20 gibi bir ko\u015fulla devam edin.<\/li>\n<\/ul>\n<p>B\u00f6ylece MySQL her seferinde sadece gerekli aral\u0131\u011f\u0131 tarar, OFFSET y\u00fcz\u00fcnden ba\u015ftan itibaren saymaya zorlanmaz.<\/p>\n<h3><span id=\"COUNT_ve_istatistik_sorgularini_hafifletmek\">COUNT(*) ve istatistik sorgular\u0131n\u0131 hafifletmek<\/span><\/h3>\n<p>\u00d6zellikle filtreli arama sayfalar\u0131nda, toplam sonu\u00e7 say\u0131s\u0131n\u0131 g\u00f6stermek i\u00e7in COUNT(*) \u00e7al\u0131\u015ft\u0131rmak yayg\u0131n bir pratiktir. Ancak karma\u015f\u0131k JOIN&#8217;li sorgularda bu \u00e7ok a\u011f\u0131r olabilir. \u00c7\u00f6z\u00fcmler:<\/p>\n<ul>\n<li>Derin sayfalama nadiren kullan\u0131l\u0131yorsa, kesin say\u0131 yerine &#8220;50+ \u00fcr\u00fcn&#8221; gibi aral\u0131kl\u0131 g\u00f6sterimler d\u00fc\u015f\u00fcnmek.<\/li>\n<li>COUNT(*) i\u00e7in daha hafif, sadece ID \u00fczerinden \u00e7al\u0131\u015fan alternatif sorgular yazmak.<\/li>\n<li>Yo\u011fun kullan\u0131lan sabit filtreler i\u00e7in \u00f6nceden hesaplanm\u0131\u015f saya\u00e7lar tutan ayr\u0131 tablolar tasarlamak.<\/li>\n<\/ul>\n<h3><span id=\"Denormalizasyon_ve_ozet_tablolar\">Denormalizasyon ve \u00f6zet tablolar<\/span><\/h3>\n<p>Teorik olarak en temiz veritaban\u0131 tasar\u0131m\u0131 her zaman en h\u0131zl\u0131s\u0131 de\u011fildir. WooCommerce gibi okuma a\u011f\u0131rl\u0131kl\u0131 (read-heavy) sistemlerde, baz\u0131 verileri \u00f6zet tablolarda ikinci kez saklamak kabul edilebilir ve hatta \u00f6nerilir.<\/p>\n<p>\u00d6rne\u011fin, kategori + fiyat aral\u0131\u011f\u0131 + attribute kombinasyonlar\u0131 i\u00e7in \u00e7ok s\u0131k ayn\u0131 filtreler kullan\u0131l\u0131yorsa, bu kombinasyonlar\u0131n \u00fcr\u00fcn ID listelerini tutan bir &#8220;facet index&#8221; tablosu tasarlamak m\u00fcmk\u00fcnd\u00fcr. Arka planda cron veya queue sistemiyle g\u00fcncellenen bu tablo, \u00f6n y\u00fczdeki sorgular\u0131 dramatik bi\u00e7imde hafifletebilir.<\/p>\n<h2><span id=\"MySQL_Sunucu_Ayarlari_ve_Altyapi_Etkisi\">MySQL Sunucu Ayarlar\u0131 ve Altyap\u0131 Etkisi<\/span><\/h2>\n<p>\u0130ndeks ve sorgu optimizasyonu ne kadar iyi olursa olsun, veritaban\u0131 sunucusunun temel ayarlar\u0131 ve altyap\u0131s\u0131 sa\u011fl\u0131kl\u0131 de\u011filse beklenen kazan\u0131m\u0131 tam olarak g\u00f6remezsiniz. \u00d6zellikle:<\/p>\n<ul>\n<li><strong>innodb_buffer_pool_size<\/strong> boyutu (aktif veri setinizin m\u00fcmk\u00fcn oldu\u011funca b\u00fcy\u00fck k\u0131sm\u0131n\u0131 RAM&#8217;de tutacak \u015fekilde).<\/li>\n<li><strong>innodb_log_file_size<\/strong> ve <strong>innodb_flush_log_at_trx_commit<\/strong> gibi yazma performans\u0131n\u0131 etkileyen parametreler.<\/li>\n<li>Disk performans\u0131 (NVMe SSD ile IOPS ve gecikme avantaj\u0131).<\/li>\n<\/ul>\n<p>Bu ayarlar\u0131n detaylar\u0131n\u0131 ve WooCommerce y\u00fckleri i\u00e7in nas\u0131l hesaplanaca\u011f\u0131n\u0131, ba\u015fta bahsetti\u011fimiz <a href='https:\/\/www.dchost.com\/blog\/woocommerce-icin-mysql-innodb-tuning-kontrol-listesi-buffer-pool-indeksleme-ve-slow-query-analizi-nasil-akillica-yapilir\/'>MySQL\/InnoDB tuning rehberimizde<\/a> kapsaml\u0131 \u015fekilde anlatt\u0131k.<\/p>\n<p>Ayr\u0131ca kapasite planlamas\u0131 yaparken yaln\u0131zca veritaban\u0131n\u0131 de\u011fil, PHP-FPM, Redis ve web sunucusunu da birlikte d\u00fc\u015f\u00fcnmeniz gerekir. Toplam kaynak ihtiyac\u0131n\u0131 hesaplamak i\u00e7in <a href='https:\/\/www.dchost.com\/blog\/woocommerce-kapasite-planlama-rehberi-vcpu-ram-iops-nasil-hesaplanir\/'>WooCommerce kapasite planlama rehberimizden<\/a> faydalanabilirsiniz.<\/p>\n<h2><span id=\"Izleme_Slow_Query_Log_ve_Guvenli_Degisiklik_Sureci\">\u0130zleme, Slow Query Log ve G\u00fcvenli De\u011fi\u015fiklik S\u00fcreci<\/span><\/h2>\n<p>Ba\u015far\u0131l\u0131 indeksleme ve sorgu optimizasyonu tek seferlik bir i\u015f de\u011fil, s\u00fcrekli bir s\u00fcre\u00e7tir. Bunu y\u00f6netilebilir k\u0131lmak i\u00e7in birka\u00e7 temel prati\u011fi oturtman\u0131z\u0131 \u00f6neriyoruz.<\/p>\n<h3><span id=\"Slow_query_log_kullanimi\">Slow query log kullan\u0131m\u0131<\/span><\/h3>\n<p>MySQL&#8217;in <strong>slow_query_log<\/strong> \u00f6zelli\u011fi, belirli bir e\u015fik s\u00fcreden uzun s\u00fcren sorgular\u0131 kaydeder. B\u00fcy\u00fck WooCommerce sitelerinde:<\/p>\n<ul>\n<li>long_query_time de\u011ferini \u00f6rne\u011fin 0.5\u20131 saniye aral\u0131\u011f\u0131nda ba\u015flatabilirsiniz.<\/li>\n<li>Loglar\u0131 d\u00fczenli aral\u0131klarla analiz edip, en s\u0131k ve en a\u011f\u0131r sorgular\u0131 tespit edin.<\/li>\n<li>Her iyile\u015ftirmeden sonra ayn\u0131 sorgular\u0131n tekrar loga d\u00fc\u015f\u00fcp d\u00fc\u015fmedi\u011fini takip edin.<\/li>\n<\/ul>\n<p>Log analizi i\u00e7in \u00e7e\u015fitli ara\u00e7lar kullan\u0131labilir; ancak basit grep\/sort i\u015flemleri bile ilk etapta olduk\u00e7a i\u015fe yarar.<\/p>\n<h3><span id=\"Test_ortami_ve_sema_degisiklikleri\">Test ortam\u0131 ve \u015fema de\u011fi\u015fiklikleri<\/span><\/h3>\n<p>Canl\u0131 bir WooCommerce veritaban\u0131na do\u011frudan ALTER TABLE komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmak risklidir; \u00f6zellikle milyonlarca sat\u0131rl\u0131k tablolarda kilitlenme ve kesinti ya\u015fanabilir. Bu y\u00fczden:<\/p>\n<ul>\n<li>\u00d6nce staging\/test ortam\u0131nda ayn\u0131 tablo yap\u0131s\u0131 ve benzer veri hacmiyle de\u011fi\u015fiklikleri deneyin.<\/li>\n<li>\u0130ndeks ekleme gibi i\u015flemler i\u00e7in m\u00fcmk\u00fcn oldu\u011funca \u00e7evrim i\u00e7i (online) \u00e7al\u0131\u015fan ara\u00e7lar\u0131 de\u011ferlendirin.<\/li>\n<li>Her kritik de\u011fi\u015fiklik \u00f6ncesi mutlaka g\u00fcncel ve test edilmi\u015f bir yede\u011finiz olsun.<\/li>\n<\/ul>\n<p>Yedek taraf\u0131nda nereden ba\u015flaman\u0131z gerekti\u011fini, <a href='https:\/\/www.dchost.com\/blog\/mysql-mariadb-yedekleme-stratejileri-mysqldump-mi-xtrabackup-mi-ve-point%e2%80%91in%e2%80%91time-recovery-ne-zaman\/'>MySQL\/MariaDB yedekleme stratejileri rehberimizde<\/a> detayl\u0131 olarak anlatt\u0131k. \u015eema de\u011fi\u015fikliklerini s\u0131f\u0131r kesintiyle yapmak istedi\u011finiz senaryolar i\u00e7inse <a href='https:\/\/www.dchost.com\/blog\/mysqlde-sifir-kesinti-sema-degisiklikleri-gh-ost-ve-pt-online-schema-change-ile-blue-green-nasil-kurulur\/'>MySQL&#8217;de s\u0131f\u0131r kesinti \u015fema de\u011fi\u015fiklikleri<\/a> yaz\u0131m\u0131z yol g\u00f6sterici olacakt\u0131r.<\/p>\n<h2><span id=\"DCHost_Altyapisinda_WooCommerce_ve_MySQL_Icin_Yol_Haritasi\">DCHost Altyap\u0131s\u0131nda WooCommerce ve MySQL \u0130\u00e7in Yol Haritas\u0131<\/span><\/h2>\n<p>DCHost taraf\u0131nda, \u00f6zellikle b\u00fcy\u00fck kataloglu WooCommerce siteleri i\u00e7in i\u015fi yaln\u0131zca &#8220;bir veritaban\u0131 sunucusu verelim&#8221; seviyesinde b\u0131rakm\u0131yoruz. Saha deneyimlerimize g\u00f6re en sa\u011fl\u0131kl\u0131 ilerleme \u015fu ad\u0131mlarla oluyor:<\/p>\n<ul>\n<li>Mevcut site \u00fczerinde k\u0131sa bir <strong>slow query<\/strong> analizi ve EXPLAIN incelemesi.<\/li>\n<li>Kritik tablolar i\u00e7in indeks denetimi ve \u00f6neri listesi.<\/li>\n<li>MySQL\/InnoDB ayarlar\u0131n\u0131n, site trafi\u011fi ve veri hacmine g\u00f6re yeniden boyutland\u0131r\u0131lmas\u0131.<\/li>\n<li>Gerekiyorsa uygulama ve veritaban\u0131 sunucusunu ay\u0131rma, okuma\/yazma ayr\u0131m\u0131 ve replikasyon senaryolar\u0131.<\/li>\n<\/ul>\n<p>Altyap\u0131 taraf\u0131nda NVMe diskli <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a>, y\u00fcksek kaynakl\u0131 <a href=\"https:\/\/www.dchost.com\/tr\/fiziksel-sunucu\">dedicated sunucu<\/a> veya kendi fiziki donan\u0131m\u0131n\u0131z\u0131 veri merkezimize getirebilece\u011finiz colocation modelleriyle, WooCommerce ma\u011fazan\u0131z\u0131n veritaban\u0131 katman\u0131n\u0131 \u00f6l\u00e7eklendirebilece\u011finiz esnek se\u00e7enekler sunuyoruz. Ancak hangi mimarinin sizin i\u00e7in anlaml\u0131 oldu\u011funa karar vermeden \u00f6nce, mutlaka sorgu ve indeks taraf\u0131n\u0131 netle\u015ftirmek en maliyet-etkin yakla\u015f\u0131m olacakt\u0131r.<\/p>\n<h2><span id=\"Ozet_ve_Uygulanabilir_Yol_Haritasi\">\u00d6zet ve Uygulanabilir Yol Haritas\u0131<\/span><\/h2>\n<p>WooCommerce ve b\u00fcy\u00fck katalog sitelerinde MySQL performans\u0131n\u0131 iyile\u015ftirmek, sihirli tek bir ayarla de\u011fil; do\u011fru indeksler, makul sorgular ve sa\u011fl\u0131kl\u0131 bir altyap\u0131n\u0131n birle\u015fimiyle m\u00fcmk\u00fcn oluyor. Bu rehberde, en \u00e7ok sorun ya\u015fanan tablolar\u0131 (wp_posts, wp_postmeta, taksonomi ve sipari\u015f tablolar\u0131), bunlar i\u00e7in pratik indeks \u00f6rneklerini ve EXPLAIN \u00e7\u0131kt\u0131s\u0131n\u0131 yorumlaman\u0131n temel prensiplerini payla\u015ft\u0131k. \u00d6zellikle kategori + fiyat + attribute filtrelerinin ve varyasyonlu \u00fcr\u00fcnlerin veritaban\u0131 taraf\u0131nda nas\u0131l y\u00fck olu\u015fturdu\u011funu ve bunlara kar\u015f\u0131 neler yapabilece\u011finizi g\u00f6rd\u00fck.<\/p>\n<p>Buradan sonra atabilece\u011finiz somut ad\u0131mlar \u015funlar olabilir:<\/p>\n<ul>\n<li>Slow query log&#8217;u aktifle\u015ftirip, en a\u011f\u0131r 10\u201320 sorguyu belirlemek.<\/li>\n<li>Bu sorgular i\u00e7in EXPLAIN \u00e7al\u0131\u015ft\u0131r\u0131p, indeks ve sorgu yaz\u0131m\u0131n\u0131 g\u00f6zden ge\u00e7irmek.<\/li>\n<li>Kritik indeksleri ekledikten sonra hem sorgu s\u00fcrelerini hem de CPU\/IO kullan\u0131m\u0131n\u0131 tekrar \u00f6l\u00e7mek.<\/li>\n<li>Gerekiyorsa veritaban\u0131n\u0131 ayr\u0131 bir sunucuya ta\u015f\u0131ma, read replica veya ProxySQL ile read\/write ayr\u0131m\u0131 gibi mimari ad\u0131mlar\u0131 planlamak.<\/li>\n<\/ul>\n<p>E\u011fer WooCommerce ma\u011fazan\u0131z b\u00fcy\u00fcd\u00fck\u00e7e MySQL taraf\u0131nda giderek artan bir yava\u015flama hissediyorsan\u0131z, DCHost ekibi olarak hem veritaban\u0131 optimizasyonu hem de uygun VPS\/dedicated altyap\u0131 planlamas\u0131 konusunda yan\u0131n\u0131zday\u0131z. Mevcut sitenizin k\u0131sa bir analizini yaparak, birka\u00e7 somut indeks ve sorgu d\u00fczenlemesiyle bile ne kadar fark yarat\u0131labilece\u011fini birlikte g\u00f6rebiliriz.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 WooCommerce ve MySQL Performans\u0131n\u0131 Do\u011fru Konumland\u0131rmak2 WooCommerce ve B\u00fcy\u00fck Kataloglar\u0131n Veritaban\u0131 Desenini Anlamak2.1 Temel WordPress\/WooCommerce tablolar\u01312.2 WooCommerce sorgu tipleri ve y\u00fck profili3 \u0130ndeksleme Temelleri: WooCommerce Perspektifinden3.1 E\u015fitlik ve aral\u0131k \u015fartlar\u0131 i\u00e7in do\u011fru s\u0131ralama3.2 WooCommerce i\u00e7in tipik indeks ihtiya\u00e7lar\u01313.2.1 wp_posts i\u00e7in indeksler3.2.2 wp_postmeta i\u00e7in indeksler3.2.3 Taksonomi tablolar\u0131 i\u00e7in indeksler4 EXPLAIN ile Sorgu Plan\u0131n\u0131 Okumay\u0131 \u00d6\u011frenmek4.1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3479,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-3478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/3478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=3478"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/3478\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/3479"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=3478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=3478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=3478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}