{"id":915,"date":"2026-09-24T14:41:57","date_gmt":"2026-09-24T14:41:57","guid":{"rendered":"https:\/\/www.vps.tc\/blog\/?p=915"},"modified":"2026-09-24T09:30:58","modified_gmt":"2026-09-24T09:30:58","slug":"veritabani-indeksi-nedir-sorgular-nasil-hizlanir","status":"publish","type":"post","link":"https:\/\/www.vps.tc\/blog\/tr\/veritabani-indeksi-nedir-sorgular-nasil-hizlanir\/","title":{"rendered":"Veritaban\u0131 \u0130ndeksi Nedir? Sorgular Nas\u0131l H\u0131zlan\u0131r?"},"content":{"rendered":"<div class=\"aiw-summary\" id=\"aiw-ozet\">\n<p class=\"aiw-summary-title\">H\u0131zl\u0131 \u00d6zet &#8211; Veritaban\u0131 \u0130ndeksi<\/p>\n<p>\u0130ndeks, aranan sat\u0131rlara daha az veri okuyarak ula\u015fmay\u0131 sa\u011flayan yard\u0131mc\u0131 bir yap\u0131d\u0131r. Do\u011fru sorgu ve do\u011fru kolon s\u0131ras\u0131yla h\u0131z kazand\u0131r\u0131r; gereksiz kullan\u0131ld\u0131\u011f\u0131nda yazma i\u015flemlerini ve disk t\u00fcketimini art\u0131r\u0131r.<\/p>\n<ul>\n<li><strong>Temel g\u00f6rev<\/strong> \u2014 \u0130ndeks, tabloyu ba\u015ftan sona taramak yerine uygun kayda daha k\u0131sa yoldan ula\u015f\u0131r.<\/li>\n<li><strong>\u00d6l\u00e7\u00fcm arac\u0131<\/strong> \u2014 Sorgunun indeks kullan\u0131p kullanmad\u0131\u011f\u0131n\u0131 ve tahmini maliyetini EXPLAIN \u00e7\u0131kt\u0131s\u0131yla kontrol edin.<\/li>\n<li><strong>Kolon s\u0131ras\u0131<\/strong> \u2014 Birle\u015fik indekslerde kolonlar\u0131n s\u0131ras\u0131, hangi sorgular\u0131n verimli \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirler.<\/li>\n<li><strong>Yazma maliyeti<\/strong> \u2014 INSERT, UPDATE ve DELETE i\u015flemleri her ilgili indeksi de g\u00fcncelledi\u011fi i\u00e7in ek kaynak harcar.<\/li>\n<li><strong>Se\u00e7icilik<\/strong> \u2014 \u00c7ok az farkl\u0131 de\u011fer i\u00e7eren kolonlarda indeks, geni\u015f tablo taramas\u0131ndan daha iyi olmayabilir.<\/li>\n<li><strong>G\u00fcvenli de\u011fi\u015fiklik<\/strong> \u2014 \u0130ndeksi staging ortam\u0131nda test edin, \u00fcretim \u00f6ncesi ve sonras\u0131 sorgu metriklerini kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/li>\n<\/ul>\n<\/div>\n<p class=\"aiw-lead\">Veritaban\u0131 indeksi, tablodaki kay\u0131tlara daha h\u0131zl\u0131 ula\u015fmak i\u00e7in kullan\u0131lan yard\u0131mc\u0131 veri yap\u0131s\u0131d\u0131r. Kitap dizini gibi \u00e7al\u0131\u015farak veritaban\u0131n\u0131n her sat\u0131r\u0131 tek tek okumas\u0131n\u0131 azalt\u0131r. Uygun indeks, \u00f6zellikle b\u00fcy\u00fck tablolarda sorgu s\u00fcresini d\u00fc\u015f\u00fcr\u00fcr; yanl\u0131\u015f indeks ise disk alan\u0131 t\u00fcketir, yazma i\u015flemlerini yava\u015flat\u0131r ve beklenen fayday\u0131 sa\u011flamaz.<\/p>\n<div class=\"aiw-toc\" style=\"border:1px solid #dbe3ea;border-radius:8px;padding:16px 20px;margin:0 0 28px\">\n<p class=\"aiw-toc-head\"><strong>\u0130\u00e7indekiler<\/strong><span class=\"aiw-toc-meta\"> \u00b7 10 dk okuma<\/span><\/p>\n<ol style=\"margin:10px 0 0;padding-left:22px\">\n<li><a href=\"#veritabani-indeksi-nedir-ve-ne-ise-yarar\">Veritaban\u0131 indeksi nedir ve ne i\u015fe yarar?<\/a><\/li>\n<li><a href=\"#veritabani-sorgulari-indeks-kullanarak-nasil-hizlanir\">Veritaban\u0131 sorgular\u0131 indeks kullanarak nas\u0131l h\u0131zlan\u0131r?<\/a><\/li>\n<li><a href=\"#bir-tabloya-indeks-nasil-eklenir\">Bir tabloya indeks nas\u0131l eklenir?<\/a><\/li>\n<li><a href=\"#tek-kolonlu-ve-birlesik-indeks-arasindaki-fark-nedir\">Tek kolonlu ve birle\u015fik indeks aras\u0131ndaki fark nedir?<\/a><\/li>\n<li><a href=\"#explain-ciktisi-nasil-okunur\">EXPLAIN \u00e7\u0131kt\u0131s\u0131 nas\u0131l okunur?<\/a><\/li>\n<li><a href=\"#indeks-sorguyu-ne-zaman-yavaslatir\">\u0130ndeks sorguyu ne zaman yava\u015flat\u0131r?<\/a><\/li>\n<li><a href=\"#like-fonksiyonlar-ve-indeks-kullanimi\">LIKE, fonksiyonlar ve indeks kullan\u0131m\u0131<\/a><\/li>\n<li><a href=\"#indeks-tasariminda-guvenli-uygulama-sirasi\">\u0130ndeks tasar\u0131m\u0131nda g\u00fcvenli uygulama s\u0131ras\u0131<\/a><\/li>\n<li><a href=\"#indeks-eklemeye-baslamadan-once-kontrol-edin\">\u0130ndeks Eklemeye Ba\u015flamadan \u00d6nce Kontrol Edin<\/a><\/li>\n<li><a href=\"#sik-sorulan-sorular\">S\u0131k Sorulan Sorular<\/a><\/li>\n<li><a href=\"#kaynaklar\">Kaynaklar<\/a><\/li>\n<\/ol>\n<\/div>\n<h2 id=\"veritabani-indeksi-nedir-ve-ne-ise-yarar\">Veritaban\u0131 indeksi nedir ve ne i\u015fe yarar?<\/h2>\n<p>Veritaban\u0131 indeksi, tablodaki sat\u0131rlara daha h\u0131zl\u0131 ula\u015fmak i\u00e7in olu\u015fturulan yard\u0131mc\u0131 veri yap\u0131s\u0131d\u0131r. Bir kitab\u0131n alfabetik dizini gibi \u00e7al\u0131\u015f\u0131r; veritaban\u0131 her sorguda tablonun tamam\u0131n\u0131 taramak yerine uygun indeksi kullanarak aranan kay\u0131tlara daha k\u0131sa yoldan yakla\u015fabilir. Kar\u015f\u0131l\u0131\u011f\u0131nda disk alan\u0131, ek yazma maliyeti ve bak\u0131m ihtiyac\u0131 getirir.<\/p>\n<p>\u0130ndeks, verinin kendisi de\u011fildir. Tablodaki de\u011ferleri ve ilgili sat\u0131r konumlar\u0131n\u0131 d\u00fczenleyen ayr\u0131 bir yap\u0131d\u0131r. MySQL 8.0 belgelerinde indekslerin \u00f6zellikle <code>WHERE<\/code>, <code>JOIN<\/code>, <code>ORDER BY<\/code> ve baz\u0131 <code>GROUP BY<\/code> i\u015flemlerinde sorgu maliyetini azaltabildi\u011fi belirtilir. Her kolona indeks eklemek do\u011fru de\u011fildir; sorgunun yap\u0131s\u0131, veri da\u011f\u0131l\u0131m\u0131 ve tablonun yazma s\u0131kl\u0131\u011f\u0131 birlikte de\u011ferlendirilmelidir.<\/p>\n<p>\u00d6rne\u011fin 10 milyon sat\u0131rl\u0131k <code>orders<\/code> tablosunda <code>customer_id<\/code> alan\u0131 indekslenmemi\u015fse veritaban\u0131 aranan m\u00fc\u015fteriyi bulmak i\u00e7in \u00e7ok say\u0131da sat\u0131r\u0131 kontrol edebilir. Ayn\u0131 alan \u00fczerinde uygun bir indeks bulundu\u011funda arama alan\u0131 daral\u0131r. Bu h\u0131zlanman\u0131n ger\u00e7ek olup olmad\u0131\u011f\u0131n\u0131 tahminle de\u011fil, <code>EXPLAIN<\/code> \u00e7\u0131kt\u0131s\u0131yla \u00f6l\u00e7mek gerekir.<\/p>\n<p><strong>Ne yap\u0131lmal\u0131:<\/strong> \u0130ndeks eklemeden \u00f6nce yava\u015f sorguyu <code>EXPLAIN<\/code> ile inceleyin ve sorgunun ger\u00e7ekten tablo taramas\u0131 yap\u0131p yapmad\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<\/p>\n<h2 id=\"veritabani-sorgulari-indeks-kullanarak-nasil-hizlanir\">Veritaban\u0131 sorgular\u0131 indeks kullanarak nas\u0131l h\u0131zlan\u0131r?<\/h2>\n<p>\u0130ndeksin \u00e7al\u0131\u015fma mant\u0131\u011f\u0131n\u0131 basit bir arama \u00fczerinden g\u00f6rmek kolayd\u0131r. \u0130ndeks yoksa veritaban\u0131 uygun kayd\u0131 bulmak i\u00e7in sat\u0131rlar\u0131 ba\u015ftan sona tarayabilir. Bu y\u00f6nteme genellikle full table scan denir. Sat\u0131r say\u0131s\u0131 artt\u0131k\u00e7a okunacak veri miktar\u0131 da b\u00fcy\u00fcr.<\/p>\n<p>B-tree, ili\u015fkisel veritabanlar\u0131nda s\u0131k kullan\u0131lan indeks t\u00fcrlerinden biridir. De\u011ferler dengeli bir a\u011fa\u00e7 yap\u0131s\u0131nda tutulur. Arama, her sat\u0131r\u0131 tek tek kontrol etmek yerine a\u011fac\u0131n ilgili dal\u0131na ilerler. Bu yap\u0131 e\u015fitlik aramalar\u0131nda, aral\u0131k sorgular\u0131nda ve s\u0131ralama i\u015flemlerinde kullan\u0131labilir.<\/p>\n<p>Basitle\u015ftirilmi\u015f sorgu:<\/p>\n<pre><code>SELECT id, email\nFROM users\nWHERE email = 'ayse@example.com';<\/code><\/pre>\n<p><code>users.email<\/code> \u00fczerinde uygun bir indeks varsa veritaban\u0131 e-posta de\u011ferini indeks \u00fczerinden aray\u0131p ilgili sat\u0131ra ge\u00e7ebilir. \u0130ndeks yoksa tablo b\u00fcy\u00fckl\u00fc\u011f\u00fcne ba\u011fl\u0131 olarak daha fazla sat\u0131r okunur. H\u0131zlanma, i\u015flemcinin sihirli bi\u00e7imde daha h\u0131zl\u0131 \u00e7al\u0131\u015fmas\u0131ndan de\u011fil, gereksiz disk ve bellek okumas\u0131n\u0131n azalmas\u0131ndan gelir.<\/p>\n<p>\u0130ndeksin etkisi VPS ortam\u0131nda daha g\u00f6r\u00fcn\u00fcr olabilir. CPU kullan\u0131m\u0131 d\u00fc\u015f\u00fckken disk bekleme s\u00fcresi y\u00fckseliyorsa sorgu gere\u011finden fazla veri okuyor olabilir. <code>iostat<\/code>, veritaban\u0131 slow query log&#8217;u ve <code>EXPLAIN<\/code> birlikte incelenmelidir.<\/p>\n<h3>\u0130ndeks neden her sorguyu h\u0131zland\u0131rmaz?<\/h3>\n<p>Optimizasyon motoru her zaman indeksi se\u00e7mek zorunda de\u011fildir. K\u00fc\u00e7\u00fck bir tabloda t\u00fcm sat\u0131rlar\u0131 okumak, indeks a\u011fac\u0131n\u0131 okuyup ard\u0131ndan tabloya gitmekten daha ucuz olabilir. Sorgu sonucunun tablonun b\u00fcy\u00fck b\u00f6l\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcrmesi de indeks avantaj\u0131n\u0131 azalt\u0131r.<\/p>\n<p>Kolonun se\u00e7icili\u011fi \u00f6nemlidir. Milyonlarca sat\u0131rda yaln\u0131zca iki farkl\u0131 de\u011fer bulunan <code>status<\/code> alan\u0131 d\u00fc\u015f\u00fck se\u00e7icili\u011fe sahiptir. <code>WHERE status = 'active'<\/code> sorgusu sat\u0131rlar\u0131n y\u00fczde 90&#8217;\u0131n\u0131 d\u00f6nd\u00fcr\u00fcyorsa geni\u015f bir tarama daha verimli olabilir. Kesin karar ger\u00e7ek veriler \u00fczerindeki plan incelenerek verilmelidir.<\/p>\n<p><strong>Ne yap\u0131lmal\u0131:<\/strong> \u0130ndeksin i\u015fe yarad\u0131\u011f\u0131n\u0131 yaln\u0131zca sorgu s\u00fcresine bakarak de\u011fil, okunan sat\u0131r say\u0131s\u0131 ve se\u00e7ilen eri\u015fim plan\u0131yla \u00f6l\u00e7\u00fcn.<\/p>\n<div class=\"aiw-callout aiw-callout-tip\">\n<p class=\"aiw-callout-label\">\u0130pucu<\/p>\n<p>Yava\u015f sorguyu kopyalay\u0131p do\u011frudan \u00fcretimde de\u011fi\u015ftirmeden \u00f6nce EXPLAIN ile plan\u0131n\u0131 kaydedin. \u0130ndeks ekledikten sonra ayn\u0131 plan\u0131 ve okunan sat\u0131r say\u0131s\u0131n\u0131 yeniden kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/p>\n<\/div>\n<h2 id=\"bir-tabloya-indeks-nasil-eklenir\">Bir tabloya indeks nas\u0131l eklenir?<\/h2>\n<p>MySQL ve MariaDB&#8217;de tek kolonlu indeks olu\u015fturmak i\u00e7in <code>CREATE INDEX<\/code> kullan\u0131labilir:<\/p>\n<pre><code>CREATE INDEX idx_users_email\nON users (email);<\/code><\/pre>\n<p>Tabloyu de\u011fi\u015ftirerek de ayn\u0131 i\u015flem yap\u0131labilir:<\/p>\n<pre><code>ALTER TABLE users\nADD INDEX idx_users_email (email);<\/code><\/pre>\n<p>\u0130ndeks ad\u0131 y\u00f6netim a\u00e7\u0131s\u0131ndan \u00f6nemlidir. <code>idx_users_email<\/code> gibi bir ad, indeksin hangi tablo ve kolona ait oldu\u011funu hemen g\u00f6sterir. \u00dcretim tablosunda i\u015flem yapmadan \u00f6nce tablo boyutunu, mevcut indeksleri ve olas\u0131 kilitlenme etkisini kontrol edin. MySQL s\u00fcr\u00fcm\u00fcne ve depolama motoruna g\u00f6re <code>ALTER TABLE<\/code> i\u015fleminin \u00e7evrimi\u00e7i \u00e7al\u0131\u015fma davran\u0131\u015f\u0131 de\u011fi\u015febilir.<\/p>\n<p>Mevcut indeksleri g\u00f6rmek i\u00e7in:<\/p>\n<pre><code>SHOW INDEX FROM users;<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131daki <code>Key_name<\/code>, <code>Column_name<\/code>, <code>Non_unique<\/code> ve <code>Cardinality<\/code> alanlar\u0131 \u00f6zellikle de\u011ferlidir. <code>Cardinality<\/code> yakla\u015f\u0131k benzersiz de\u011fer say\u0131s\u0131n\u0131 g\u00f6sterir; istatistiklere dayan\u0131r ve kesin sat\u0131r say\u0131s\u0131 anlam\u0131na gelmez.<\/p>\n<p>PostgreSQL taraf\u0131nda s\u00f6zdizimi benzerdir:<\/p>\n<pre><code>CREATE INDEX idx_users_email\nON users (email);<\/code><\/pre>\n<p>PostgreSQL belgeleri indekslerin sorgular\u0131 h\u0131zland\u0131r\u0131rken ek depolama kulland\u0131\u011f\u0131n\u0131 ve veri de\u011fi\u015ftirme i\u015flemlerine maliyet ekledi\u011fini belirtir. Kullan\u0131lmayan indeksleri periyodik olarak tespit etmek, yeni indeks eklemek kadar de\u011ferlidir.<\/p>\n<h2 id=\"tek-kolonlu-ve-birlesik-indeks-arasindaki-fark-nedir\">Tek kolonlu ve birle\u015fik indeks aras\u0131ndaki fark nedir?<\/h2>\n<p>Tek kolonlu indeks yaln\u0131zca bir alan\u0131 kapsar. Birle\u015fik indeks ise iki veya daha fazla kolonu belirli bir s\u0131rayla tutar:<\/p>\n<pre><code>CREATE INDEX idx_orders_customer_date\nON orders (customer_id, created_at);<\/code><\/pre>\n<p>Bu indeks a\u015fa\u011f\u0131daki sorgu i\u00e7in genellikle anlaml\u0131d\u0131r:<\/p>\n<pre><code>SELECT id, total\nFROM orders\nWHERE customer_id = 42\n  AND created_at &gt;= '2026-01-01'\nORDER BY created_at DESC;<\/code><\/pre>\n<p>Birle\u015fik indekslerde kolon s\u0131ras\u0131 kritik bir ayr\u0131nt\u0131d\u0131r. <code>(customer_id, created_at)<\/code> s\u0131ralamas\u0131 \u00f6nce m\u00fc\u015fteriye, ard\u0131ndan tarihe g\u00f6re daraltma yapar. Bu yap\u0131 yaln\u0131zca <code>customer_id<\/code> filtresi kullanan sorgulara da yard\u0131mc\u0131 olabilir. Sadece <code>created_at<\/code> ile arama yapan sorgu ise bu indeksi ayn\u0131 verimle kullanamayabilir.<\/p>\n<p>Bu davran\u0131\u015f \u00e7o\u011fu B-tree indeksinde soldan ba\u015flayan \u00f6n ek kural\u0131yla a\u00e7\u0131klan\u0131r. \u00dc\u00e7 kolonlu <code>(a, b, c)<\/code> indeksi i\u00e7in <code>a<\/code> veya <code>a, b<\/code> ile ba\u015flayan ko\u015fullar genellikle daha elveri\u015flidir. Kolonlar\u0131n do\u011fru s\u0131ras\u0131, en s\u0131k kullan\u0131lan sorgular ve filtrelerin se\u00e7icili\u011fi incelenerek belirlenir.<\/p>\n<table>\n<thead>\n<tr>\n<th>\u0130ndeks<\/th>\n<th>Uygun sorgu \u00f6rne\u011fi<\/th>\n<th>Dikkat edilmesi gereken<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>(customer_id)<\/code><\/td>\n<td><code>WHERE customer_id = 42<\/code><\/td>\n<td>Tarih s\u0131ralamas\u0131n\u0131 tek ba\u015f\u0131na \u00e7\u00f6zmez<\/td>\n<\/tr>\n<tr>\n<td><code>(customer_id, created_at)<\/code><\/td>\n<td>M\u00fc\u015fteri ve tarih filtresi<\/td>\n<td>Kolon s\u0131ras\u0131 sorgu plan\u0131n\u0131 etkiler<\/td>\n<\/tr>\n<tr>\n<td><code>(created_at, customer_id)<\/code><\/td>\n<td>Tarih aral\u0131\u011f\u0131 \u00f6ncelikli raporlar<\/td>\n<td>M\u00fc\u015fteri bazl\u0131 aramalarda daha az uygun olabilir<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Ne yap\u0131lmal\u0131:<\/strong> Birle\u015fik indeks kolonlar\u0131n\u0131 tabloya g\u00f6re de\u011fil, ger\u00e7ek sorgu desenlerine g\u00f6re ve soldan ba\u015flayan \u00f6n ek kural\u0131n\u0131 g\u00f6zeterek s\u0131ralay\u0131n.<\/p>\n<div class=\"aiw-callout aiw-callout-example\">\n<p class=\"aiw-callout-label\">\u00d6rnek<\/p>\n<p>10 milyon sat\u0131rl\u0131k orders tablosunda m\u00fc\u015fteri ve tarih birlikte filtreleniyorsa (customer_id, created_at) indeksi uygun olabilir. Sadece created_at ile rapor al\u0131n\u0131yorsa ayn\u0131 indeksin yeterli olaca\u011f\u0131 varsay\u0131lmamal\u0131, EXPLAIN \u00e7\u0131kt\u0131s\u0131 incelenmelidir.<\/p>\n<\/div>\n<h2 id=\"explain-ciktisi-nasil-okunur\">EXPLAIN \u00e7\u0131kt\u0131s\u0131 nas\u0131l okunur?<\/h2>\n<p><code>EXPLAIN<\/code>, veritaban\u0131n\u0131n bir sorguyu nas\u0131l \u00e7al\u0131\u015ft\u0131rmay\u0131 planlad\u0131\u011f\u0131n\u0131 g\u00f6sterir. MySQL i\u00e7in temel kullan\u0131m \u015f\u00f6yledir:<\/p>\n<pre><code>EXPLAIN SELECT id, email\nFROM users\nWHERE email = 'ayse@example.com';<\/code><\/pre>\n<p>MySQL \u00e7\u0131kt\u0131s\u0131nda <code>type<\/code>, <code>possible_keys<\/code>, <code>key<\/code>, <code>rows<\/code> ve <code>Extra<\/code> alanlar\u0131 ilk bak\u0131lacak yerlerdir. <code>key<\/code> se\u00e7ilen indeksi g\u00f6sterir. Bo\u015f olmas\u0131 her zaman hata de\u011fildir; fakat sorgunun milyonlarca sat\u0131r\u0131 tarad\u0131\u011f\u0131 biliniyorsa ara\u015ft\u0131rma gerekir.<\/p>\n<ul>\n<li><strong>type:<\/strong> Eri\u015fim y\u00f6ntemini g\u00f6sterir; <code>const<\/code>, <code>eq_ref<\/code> ve <code>ref<\/code> bir\u00e7ok arama i\u00e7in iyi i\u015faretlerdir.<\/li>\n<li><strong>possible_keys:<\/strong> Kullan\u0131labilecek indeksleri listeler.<\/li>\n<li><strong>key:<\/strong> Planlay\u0131c\u0131n\u0131n se\u00e7ti\u011fi indeksi g\u00f6sterir.<\/li>\n<li><strong>rows:<\/strong> Okunmas\u0131 tahmin edilen sat\u0131r say\u0131s\u0131n\u0131 verir.<\/li>\n<li><strong>Extra:<\/strong> <code>Using filesort<\/code> veya <code>Using temporary<\/code> gibi ek i\u015flemleri g\u00f6sterebilir.<\/li>\n<\/ul>\n<p>MySQL 8.0 ile daha ayr\u0131nt\u0131l\u0131 analiz i\u00e7in <code>EXPLAIN ANALYZE<\/code> kullan\u0131labilir:<\/p>\n<pre><code>EXPLAIN ANALYZE\nSELECT id, total\nFROM orders\nWHERE customer_id = 42\nORDER BY created_at DESC\nLIMIT 20;<\/code><\/pre>\n<p>Bu komut tahmini plan\u0131n yan\u0131nda ger\u00e7ek \u00e7al\u0131\u015fma s\u00fcreleri ve ger\u00e7ekle\u015fen sat\u0131r say\u0131lar\u0131 hakk\u0131nda bilgi verir. \u00dcretimde dikkatli kullan\u0131n; sorgu ger\u00e7ekten \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131 i\u00e7in b\u00fcy\u00fck tablolar \u00fczerinde ek y\u00fck olu\u015fturabilir.<\/p>\n<p><code>rows<\/code> de\u011ferinin d\u00fc\u015f\u00fck olmas\u0131 tek ba\u015f\u0131na yeterli de\u011fildir. Tahmin edilen ve ger\u00e7ek sat\u0131r say\u0131lar\u0131 aras\u0131nda b\u00fcy\u00fck fark varsa istatistikler g\u00fcncel olmayabilir veya veri da\u011f\u0131l\u0131m\u0131 planlay\u0131c\u0131n\u0131n varsay\u0131m\u0131n\u0131 bozuyor olabilir.<\/p>\n<p><strong>Ne yap\u0131lmal\u0131:<\/strong> \u0130ndeks de\u011fi\u015fikli\u011finden \u00f6nce ve sonra ayn\u0131 sorguyu ayn\u0131 veri ko\u015fullar\u0131nda <code>EXPLAIN<\/code> ile kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/p>\n<div class=\"aiw-callout aiw-callout-field\">\n<p class=\"aiw-callout-label\">Sahadan not<\/p>\n<p>\u00dcretimde bir indeks ekledi\u011fimde ALTER TABLE i\u015flemi beklemede kald\u0131. SHOW PROCESSLIST \u00e7\u0131kt\u0131s\u0131nda ba\u015fka bir oturum\u0131n metadata lock tuttu\u011funu g\u00f6rd\u00fcm; i\u015flemi durdurup de\u011fi\u015fikli\u011fi d\u00fc\u015f\u00fck trafikli pencereye ta\u015f\u0131d\u0131m.<\/p>\n<\/div>\n<h2 id=\"indeks-sorguyu-ne-zaman-yavaslatir\">\u0130ndeks sorguyu ne zaman yava\u015flat\u0131r?<\/h2>\n<p>Her indeksin bir bedeli vard\u0131r. Yeni sat\u0131r eklendi\u011finde, indekslenen kolon de\u011fi\u015ftirildi\u011finde veya sat\u0131r silindi\u011finde indeks yap\u0131s\u0131n\u0131n da g\u00fcncellenmesi gerekir. \u00c7ok say\u0131da indeks, yazma yo\u011fun uygulamalarda ek disk yaz\u0131m\u0131 ve daha fazla bellek t\u00fcketimi olu\u015fturur.<\/p>\n<p>\u0130ndeksler disk alan\u0131 da kullan\u0131r. B\u00fcy\u00fck <code>VARCHAR<\/code>, <code>TEXT<\/code> veya uzun ikili alanlar\u0131 do\u011frudan indekslemek pahal\u0131 olabilir. MySQL&#8217;de baz\u0131 metin alanlar\u0131nda prefix index tercih edilebilir:<\/p>\n<pre><code>CREATE INDEX idx_articles_title_prefix\nON articles (title(100));<\/code><\/pre>\n<p>Buradaki <code>100<\/code>, indekslenecek karakter \u00f6n ekinin uzunlu\u011fudur. Bu yakla\u015f\u0131m her sorguya uygun de\u011fildir; yaln\u0131zca ilk karakter dizisi yeterince ay\u0131rt ediciyse i\u015fe yarar. Unicode karakterlerde byte ve karakter uzunluklar\u0131n\u0131n ayn\u0131 olmayabilece\u011fini de hesaba kat\u0131n.<\/p>\n<p>Gereksiz indeksler ayr\u0131 bir sorundur. Ayn\u0131 kolonlar\u0131 ayn\u0131 s\u0131rayla kapsayan iki indeks \u00e7o\u011funlukla fazlad\u0131r. \u00d6rne\u011fin <code>(customer_id)<\/code> ve <code>(customer_id, created_at)<\/code> birlikte baz\u0131 sorgular i\u00e7in gerekli olabilir; karar verilmeden \u00f6nce sorgu kullan\u0131m s\u0131kl\u0131\u011f\u0131 ve planlar incelenmelidir.<\/p>\n<p>\u0130ndeks tan\u0131mlar\u0131 yedekleme boyutunu, tablo bak\u0131m s\u00fcrelerini ve replikasyon trafi\u011fini de etkileyebilir. VPS kaynaklar\u0131 s\u0131n\u0131rl\u0131ysa yaln\u0131zca sorgu h\u0131z\u0131na bakmak eksik bir de\u011ferlendirme olur.<\/p>\n<div class=\"aiw-callout aiw-callout-warn\">\n<p class=\"aiw-callout-label\">Dikkat<\/p>\n<p>Her kolona indeks eklemek performans ayar\u0131 de\u011fildir. \u0130ndeksler INSERT, UPDATE ve DELETE i\u015flemlerinde g\u00fcncellenir; fazla indeks yazma gecikmesini, disk kullan\u0131m\u0131n\u0131 ve bak\u0131m s\u00fcresini art\u0131rabilir.<\/p>\n<\/div>\n<h2 id=\"like-fonksiyonlar-ve-indeks-kullanimi\">LIKE, fonksiyonlar ve indeks kullan\u0131m\u0131<\/h2>\n<p>Sorgunun yaz\u0131l\u0131\u015f bi\u00e7imi, mevcut indeksin kullan\u0131l\u0131p kullan\u0131lamayaca\u011f\u0131n\u0131 belirler. Sa\u011fdan joker karakterle ba\u015flayan bir arama \u00e7o\u011fu B-tree indeksinden yararlanamaz:<\/p>\n<pre><code>SELECT id, title\nFROM articles\nWHERE title LIKE '%linux%';<\/code><\/pre>\n<p><code>%linux%<\/code> ifadesinde arama metninin ba\u015flang\u0131c\u0131 bilinmedi\u011fi i\u00e7in indeks a\u011fac\u0131nda belirli bir noktaya do\u011frudan gidilemez. Buna kar\u015f\u0131l\u0131k <code>LIKE 'linux%'<\/code> bi\u00e7imi, uygun kolasyon ve veri tiplerinde indeks i\u00e7in daha elveri\u015flidir.<\/p>\n<p>Kolona fonksiyon uygulamak da indeks kullan\u0131m\u0131n\u0131 engelleyebilir:<\/p>\n<pre><code>SELECT id\nFROM users\nWHERE LOWER(email) = 'ayse@example.com';<\/code><\/pre>\n<p>Bu sorgu i\u00e7in veritaban\u0131n\u0131n normal <code>email<\/code> indeksini kullanmas\u0131 garanti de\u011fildir. \u00c7\u00f6z\u00fcm, uygulama taraf\u0131nda de\u011ferleri normalize etmek, veritaban\u0131n\u0131n destekledi\u011fi fonksiyonel indeksleri kullanmak veya uygun bir generated column tan\u0131mlamak olabilir. Se\u00e7enekler kullan\u0131lan veritaban\u0131 s\u00fcr\u00fcm\u00fcne g\u00f6re de\u011fi\u015fir.<\/p>\n<p>Benzer durum tarih ve say\u0131 d\u00f6n\u00fc\u015f\u00fcmlerinde de g\u00f6r\u00fcl\u00fcr. Filtrelenen kolonu sorgu i\u00e7inde s\u00fcrekli d\u00f6n\u00fc\u015ft\u00fcrmek yerine veri tiplerini ba\u015ftan tutarl\u0131 se\u00e7mek daha sa\u011fl\u0131kl\u0131d\u0131r. PHP uygulamas\u0131, WordPress eklentisi veya ORM katman\u0131 sorguyu basit g\u00f6sterse bile ger\u00e7ek SQL&#8217;i slow query log&#8217;undan kontrol edin.<\/p>\n<p>WordPress tabanl\u0131 bir VPS&#8217;te veritaban\u0131 ba\u011flant\u0131 sorunlar\u0131n\u0131 incelerken yaln\u0131zca kullan\u0131c\u0131 ad\u0131 ve parola kontrol edilmez; a\u011f\u0131r sorgular, tablo yap\u0131s\u0131 ve disk gecikmesi de de\u011ferlendirilir. Bu konu, <a href=\"https:\/\/www.vps.tc\/blog\/tr\/wordpress-veritabani-baglanti-hatasi-nasil-cozulur\/\">WordPress Veritaban\u0131 Ba\u011flant\u0131 Hatas\u0131 Nas\u0131l \u00c7\u00f6z\u00fcl\u00fcr?<\/a> ba\u015fl\u0131\u011f\u0131ndaki ba\u011flant\u0131 katman\u0131 kontrolleriyle birlikte d\u00fc\u015f\u00fcn\u00fclmelidir.<\/p>\n<h2 id=\"indeks-tasariminda-guvenli-uygulama-sirasi\">\u0130ndeks tasar\u0131m\u0131nda g\u00fcvenli uygulama s\u0131ras\u0131<\/h2>\n<p>\u00dcretim sisteminde indeks eklemek, tek sat\u0131rl\u0131k bir SQL komutu \u00e7al\u0131\u015ft\u0131rmaktan daha geni\u015f bir i\u015flemdir. \u00d6nce yava\u015f sorgu belirlenir. Ard\u0131ndan sorgunun ka\u00e7 kez \u00e7al\u0131\u015ft\u0131\u011f\u0131, ka\u00e7 sat\u0131r d\u00f6nd\u00fcrd\u00fc\u011f\u00fc, tablonun b\u00fcy\u00fckl\u00fc\u011f\u00fc ve yazma trafi\u011fi \u00f6l\u00e7\u00fcl\u00fcr.<\/p>\n<ol>\n<li>Slow query log veya uygulama metriklerinden sorguyu se\u00e7in.<\/li>\n<li>Sorgunun parametrelerini ger\u00e7ek \u00fcretim de\u011ferlerine yak\u0131n tutun.<\/li>\n<li><code>EXPLAIN<\/code> ile mevcut eri\u015fim plan\u0131n\u0131 kaydedin.<\/li>\n<li>Benzer mevcut indeksleri <code>SHOW INDEX<\/code> veya veritaban\u0131n\u0131n katalog g\u00f6r\u00fcn\u00fcmleriyle kontrol edin.<\/li>\n<li>\u0130ndeksi \u00f6nce staging ortam\u0131nda olu\u015fturun.<\/li>\n<li>\u0130ndeks sonras\u0131 sorgu s\u00fcresini, okunan sat\u0131rlar\u0131 ve yazma gecikmesini kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/li>\n<li>Beklenmeyen plan de\u011fi\u015fiminde geri alma komutunu haz\u0131r tutun.<\/li>\n<\/ol>\n<p>\u0130ndeks eklemek uygulama kodundaki k\u00f6t\u00fc sorguyu otomatik olarak d\u00fczeltmez. <code>SELECT *<\/code> kullan\u0131m\u0131, gereksiz <code>JOIN<\/code> i\u015flemleri, sayfalama i\u00e7in b\u00fcy\u00fck <code>OFFSET<\/code> de\u011ferleri ve N+1 sorgu problemi ayr\u0131 ayr\u0131 ele al\u0131nmal\u0131d\u0131r. Bazen en iyi optimizasyon yeni indeks de\u011fil, daha az veri istemektir.<\/p>\n<p>Veritaban\u0131 dosyalar\u0131n\u0131n bulundu\u011fu diskin t\u00fcr\u00fc de \u00f6l\u00e7\u00fcmleri etkiler. SSD kar\u015f\u0131la\u015ft\u0131rmalar\u0131 disk gecikmesinin sorgu deneyimine etkisini anlamaya yard\u0131mc\u0131 olabilir; indeks tasar\u0131m\u0131 yine sorgu plan\u0131 \u00fczerinden yap\u0131lmal\u0131d\u0131r. Donan\u0131m arka plan\u0131 i\u00e7in <a href=\"https:\/\/www.vps.tc\/blog\/tr\/ssd-nedir-ssd-acilimi-hdd-farklari\/\">SSD Nedir? SSD A\u00e7\u0131l\u0131m\u0131 ve HDD&#8217;den Farklar\u0131<\/a> yaz\u0131s\u0131na bak\u0131labilir.<\/p>\n<p>WordPress kurulumu k\u00fc\u00e7\u00fckken her sorgu h\u0131zl\u0131 g\u00f6r\u00fcnebilir. Trafik, eklenti say\u0131s\u0131 ve i\u00e7erik miktar\u0131 artt\u0131k\u00e7a ayn\u0131 sorgunun maliyeti b\u00fcy\u00fcr. Bu nedenle yeni bir VPS kurulumunda oldu\u011fu kadar mevcut bir <a href=\"https:\/\/www.vps.tc\/blog\/tr\/vpste-wordpress-kurulumu-adim-adim\/\">VPS&#8217;te WordPress Kurulumu: Ad\u0131m Ad\u0131m Rehber<\/a> sonras\u0131nda da slow query log izleme al\u0131\u015fkanl\u0131\u011f\u0131 kurulmal\u0131d\u0131r.<\/p>\n<p>\u0130ndeks de\u011fi\u015fikliklerini Ansible veya migration sistemiyle kay\u0131t alt\u0131na almak da yararl\u0131d\u0131r. Elle \u00e7al\u0131\u015ft\u0131r\u0131lan ve unutulan SQL komutlar\u0131, sonraki sunucu kurulumlar\u0131nda ortamlar\u0131n farkl\u0131la\u015fmas\u0131na yol a\u00e7ar.<\/p>\n<p><strong>Ne yap\u0131lmal\u0131:<\/strong> \u0130ndeks de\u011fi\u015fikli\u011fini migration olarak kaydedin, staging&#8217;de deneyin ve \u00fcretim sonras\u0131 plan ile ger\u00e7ek metrikleri yeniden kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/p>\n<h2 id=\"indeks-eklemeye-baslamadan-once-kontrol-edin\">\u0130ndeks Eklemeye Ba\u015flamadan \u00d6nce Kontrol Edin<\/h2>\n<ul class=\"aiw-checklist\">\n<li>Yava\u015f sorguyu slow query log veya uygulama metriklerinden belirleyin.<\/li>\n<li>Sorgunun mevcut EXPLAIN \u00e7\u0131kt\u0131s\u0131n\u0131 kaydedin.<\/li>\n<li>Tablodaki mevcut indeksleri SHOW INDEX ile inceleyin.<\/li>\n<li>Birle\u015fik indekslerde kolon s\u0131ras\u0131n\u0131 sorgu desenine g\u00f6re belirleyin.<\/li>\n<li>\u0130ndeksi \u00f6nce staging ortam\u0131nda olu\u015fturup plan\u0131 kar\u015f\u0131la\u015ft\u0131r\u0131n.<\/li>\n<li>\u00dcretim de\u011fi\u015fikli\u011fi i\u00e7in geri alma komutunu haz\u0131rlay\u0131n.<\/li>\n<li>\u0130ndeks sonras\u0131 yazma gecikmesini, disk kullan\u0131m\u0131n\u0131 ve sorgu s\u00fcresini izleyin.<\/li>\n<\/ul>\n<div class=\"aiw-cta\">\n<p>Bir sonraki yava\u015f sorguda tahmin y\u00fcr\u00fctmek yerine \u00f6nce EXPLAIN \u00e7\u0131kt\u0131s\u0131n\u0131 al\u0131n. K\u00fc\u00e7\u00fck bir plan kar\u015f\u0131la\u015ft\u0131rmas\u0131, gereksiz indeks eklemekten ve \u00fcretimde s\u00fcrpriz ya\u015famaktan daha ucuzdur.<\/p>\n<p class=\"aiw-cta-action\"><a href=\"https:\/\/www.vps.tc\/tr\/vps\">VPS paketlerini inceleyin<\/a><\/p>\n<\/div>\n<h2 id=\"sik-sorulan-sorular\">S\u0131k Sorulan Sorular<\/h2>\n<div class=\"aiw-faq\">\n<details class=\"aiw-faq-item\" open>\n<summary>Veritaban\u0131 indeksi nedir?<\/summary>\n<p>Veritaban\u0131 indeksi, tablodaki de\u011ferlere ve ilgili sat\u0131rlara daha h\u0131zl\u0131 ula\u015fmak i\u00e7in tutulan yard\u0131mc\u0131 veri yap\u0131s\u0131d\u0131r. Kitap dizinine benzer; veritaban\u0131n\u0131n her sat\u0131r\u0131 taramak yerine indeks \u00fczerinden uygun kayda y\u00f6nelmesini sa\u011flar. \u0130ndeks sorgular\u0131 h\u0131zland\u0131rabilir, fakat ek disk alan\u0131 kullan\u0131r ve INSERT, UPDATE ile DELETE i\u015flemlerinde g\u00fcncellenmesi gerekti\u011fi i\u00e7in yazma maliyeti olu\u015fturur.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>\u0130ndeks her sorguyu h\u0131zland\u0131r\u0131r m\u0131?<\/summary>\n<p>Hay\u0131r. K\u00fc\u00e7\u00fck tablolarda t\u00fcm tabloyu okumak indeksi kullanmaktan daha ucuz olabilir. Sorgu sat\u0131rlar\u0131n b\u00fcy\u00fck b\u00f6l\u00fcm\u00fcn\u00fc d\u00f6nd\u00fcr\u00fcyorsa veya indekslenen kolonun se\u00e7icili\u011fi d\u00fc\u015f\u00fckse planlay\u0131c\u0131 tablo taramas\u0131n\u0131 tercih edebilir. Kolona fonksiyon uygulanmas\u0131, ba\u015f\u0131nda joker karakter bulunan LIKE aramas\u0131 ve yanl\u0131\u015f birle\u015fik indeks s\u0131ras\u0131 da indeks kullan\u0131m\u0131n\u0131 s\u0131n\u0131rlayabilir. Ger\u00e7ek durumu EXPLAIN ile \u00f6l\u00e7mek gerekir.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>MySQL&#039;de indeks kullan\u0131l\u0131p kullan\u0131lmad\u0131\u011f\u0131 nas\u0131l anla\u015f\u0131l\u0131r?<\/summary>\n<p>Sorgunun ba\u015f\u0131na EXPLAIN ekleyerek plan\u0131 g\u00f6r\u00fcnt\u00fcleyebilirsiniz. \u00c7\u0131kt\u0131daki key alan\u0131 se\u00e7ilen indeksi, possible_keys kullan\u0131labilecek indeksleri, rows tahmini okuma miktar\u0131n\u0131 ve type eri\u015fim y\u00f6ntemini g\u00f6sterir. key bo\u015fsa bu her zaman hata de\u011fildir; fakat b\u00fcy\u00fck bir tablo i\u00e7in rows de\u011feri y\u00fcksekse sorgu ve tablo istatistikleri daha ayr\u0131nt\u0131l\u0131 incelenmelidir. MySQL 8.0&#039;da EXPLAIN ANALYZE ger\u00e7ek \u00e7al\u0131\u015fma bilgisi de sa\u011flayabilir.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>Birle\u015fik indekslerde kolon s\u0131ras\u0131 neden \u00f6nemlidir?<\/summary>\n<p>B-tree tabanl\u0131 birle\u015fik indeksler genellikle soldan ba\u015flayan kolon s\u0131ras\u0131na g\u00f6re kullan\u0131l\u0131r. (customer_id, created_at) indeksi m\u00fc\u015fteriyle ba\u015flayan filtrelerde ve ard\u0131ndan tarih ko\u015fulu geldi\u011finde etkili olabilir. Yaln\u0131zca created_at ile yap\u0131lan sorgu ayn\u0131 indeksten beklenen fayday\u0131 alamayabilir. En do\u011fru s\u0131ra, en s\u0131k \u00e7al\u0131\u015fan sorgular\u0131n WHERE, JOIN ve ORDER BY ko\u015fullar\u0131 incelenerek belirlenir.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>\u0130ndeks eklemek veritaban\u0131n\u0131 yava\u015flat\u0131r m\u0131?<\/summary>\n<p>Okuma sorgular\u0131 h\u0131zlanabilir, fakat indekslerin bak\u0131m maliyeti vard\u0131r. Yeni sat\u0131r ekleme, mevcut sat\u0131r\u0131 g\u00fcncelleme ve silme i\u015flemlerinde ilgili indeks yap\u0131lar\u0131 da de\u011fi\u015ftirilir. \u00c7ok say\u0131da veya gereksiz indeks, yazma gecikmesini ve disk kullan\u0131m\u0131n\u0131 art\u0131rabilir. Bu nedenle indeks eklemeden \u00f6nce sorgu s\u00fcresi, yazma trafi\u011fi, tablo boyutu ve mevcut indeksler birlikte de\u011ferlendirilmelidir.<\/p>\n<\/details>\n<details class=\"aiw-faq-item\">\n<summary>\u0130ndeks ekledikten sonra sorgu h\u00e2l\u00e2 yava\u015fsa ne yap\u0131lmal\u0131?<\/summary>\n<p>\u00d6nce yeni indeksin ger\u00e7ekten se\u00e7ilip se\u00e7ilmedi\u011fini EXPLAIN ile kontrol edin. Sorgunun g\u00fcncel istatistiklere sahip oldu\u011fundan, fonksiyon veya ba\u015f\u0131nda joker karakter bulunan LIKE ifadesi nedeniyle indeksin devre d\u0131\u015f\u0131 kalmad\u0131\u011f\u0131ndan emin olun. SELECT * yerine gerekli kolonlar\u0131 se\u00e7mek, gereksiz JOIN i\u015flemlerini kald\u0131rmak veya b\u00fcy\u00fck OFFSET de\u011ferleri yerine anahtar tabanl\u0131 sayfalama kullanmak da gerekebilir. \u0130ndeks, k\u00f6t\u00fc sorgu tasar\u0131m\u0131n\u0131n tek ba\u015f\u0131na \u00e7\u00f6z\u00fcm\u00fc de\u011fildir.<\/p>\n<\/details>\n<\/div>\n<h2 id=\"kaynaklar\">Kaynaklar<\/h2>\n<ul class=\"aiw-sources\">\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/optimization-indexes.html\" target=\"_blank\" rel=\"noopener\">MySQL 8.0 Reference Manual &#8211; Optimization and Indexes<\/a> \u2014 dev.mysql.com<\/li>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/using-explain.html\" target=\"_blank\" rel=\"noopener\">MySQL 8.0 Reference Manual &#8211; Using EXPLAIN<\/a> \u2014 dev.mysql.com<\/li>\n<li><a href=\"https:\/\/www.postgresql.org\/docs\/current\/indexes.html\" target=\"_blank\" rel=\"noopener\">PostgreSQL Documentation &#8211; Indexes<\/a> \u2014 postgresql.org<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Veritaban\u0131 indekslerinin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, sorgular\u0131 hangi ko\u015fullarda h\u0131zland\u0131rd\u0131\u011f\u0131n\u0131 ve MySQL ile PostgreSQL ortamlar\u0131nda g\u00fcvenli indeks tasar\u0131m\u0131n\u0131 a\u00e7\u0131kl\u0131yoruz.<\/p>\n","protected":false},"author":2,"featured_media":913,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[873],"tags":[],"class_list":["post-915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"lang":"tr","translations":{"tr":915,"en":916},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/comments?post=915"}],"version-history":[{"count":1,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/915\/revisions"}],"predecessor-version":[{"id":917,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/posts\/915\/revisions\/917"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media\/913"}],"wp:attachment":[{"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/media?parent=915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/categories?post=915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vps.tc\/blog\/wp-json\/wp\/v2\/tags?post=915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}