SQL Sorgu Optimizasyonu: Zamanlamalarla Yürütme Planlarını Okuyun ve Yavaş Sorguları Düzeltin

  1. Ana sayfa
  2. Blog
  3. Veritabanları ve SQL

Veritabanları ve SQL

SQL Sorgu Optimizasyonu: Yürütme Planlarını Okuyun ve Zamanlamalı Yavaş Sorguları Düzeltin

Bir sorgunun neden yavaş olduğunu tahmin etmeyi bırakın. Bir yürütme planını okumayı öğrenin, ardından bir milyon satırlık gerçek bir tablodan öncesi ve sonrası ölçümlerle en önemli düzeltmeleri uygulayın.

9 dk okuma
SQL sorgu optimizasyonu: zamanlamalarla yürütme planlarını okuyun ve yavaş sorguları düzeltin

Önemli noktalar

  • Yürütme planıyla başlayın. Veritabanının gerçekte ne yaptığını size söyler.
  • Büyük tablolarda tam taramaları arayın, ardından filtreleriniz ve birleştirmelerinizle eşleşen dizinleri ekleyin.
  • Dizinlenmiş bir sütunu bir işleve sarmaktan kaçının; bu, verimli dizin kullanımını durdurabilir.
  • Öncesini ve sonrasını ölçün çünkü her veritabanı ve veri seti farklı davranır.

Geçen yıl milisaniyeler süren bir sorgu, tablo büyüdüğü için bugün dakikalar sürebiliyor. SQL sorgu optimizasyonu zekice hilelerden çok tekrarlanabilir bir süreçle ilgilidir: veritabanının ne yaptığını öğrenin, boşa giden işi kaldırın ve yardımcı olup olmadığını kontrol edin.

Aşağıdaki her tekniği SQLite 3.50’de oluşturulan bir milyon satır üzerinde test ettik. Zamanlamalar, bellek içi veritabanı kullanılarak tek bir dizüstü bilgisayardan yapılan birden fazla çalıştırmanın en iyisidir. Sisteminizle eşleşmeyeceklerdir ve PostgreSQL, MySQL ve SQL Server’ın her birinin kendi optimize edicileri ve plan formatları vardır. Her iyileştirmenin boyutuna ve arkasındaki ilkelere odaklanın.

Bir bakışta sonuçlar

Teknik önce Sonra
Filtre sütunundaki dizin 73 ms 0,01 ms
Bir sütundaki işlev yerine aralık 96 ms 33 ms
İki filtre için bileşik dizin 19 ms 2,2 ms
Derin OFFSET yerine tuş takımı 8,1 ms 0,01 ms

Test kurulumu

CREATE TABLE customers (
  id INTEGER PRIMARY KEY, name TEXT, city TEXT
);
CREATE TABLE orders (
  id INTEGER PRIMARY KEY, customer_id INT, status TEXT,
  created TEXT, total INT, note TEXT
);
-- 50,000 customers and 1,000,000 orders with random values

Basit bir optimizasyon süreci

  1. Önemli sorguları bulun. Yavaş sorgu günlüklerini veya izlemeyi kullanın. Dakikada bin kez çalışan 200 ms’lik bir sorgu, 10 saniyelik aylık bir rapordan daha önemli olabilir.
  2. Planı okuyun. Veritabanının gerçekte ne yaptığını görün.
  3. Bir şeyi değiştirin. Bir dizin ekleyin veya sorgunun bir kısmını yeniden yazın.
  4. Gerçekçi verilerle tekrar ölçüm yapın. 100 test satırından oluşan bir plan size bir milyon hakkında çok az şey anlatır.
  5. Zaman içinde izleyin. Veriler büyüdükçe ve istatistikler değiştikçe planlar değişebilir.

Bir yürütme planını okuyun

Yürütme planı, veritabanının, hangi dizinleri kullandığı ve tablolara hangi sırayla katıldığı da dahil olmak üzere, bir sorguyu çalıştırmaya yönelik adım adım stratejisidir. Bir sorguyu görmek için önek ekleyin:

Veritabanı Komut
SQLite SORU PLANINI AÇIKLAYIN SEÇİN...
PostgreSQL AÇIKLAYIN ANALİZ SEÇİN...
MySQL EXPLAIN SELECT ... veya EXPLAIN ANALYZE
SQL Sunucusu SSMS’de Gerçek Yürütme Planı

PostgreSQL’de EXPLAIN ANALYZE‘in sorguyu gerçekten çalıştırdığını unutmayın; bu nedenle bunu UPDATE veya DELETE ile kullanırken dikkatli olun. İlk önce aramanız gerekenler:

Görüyorsun Anlamı Genellikle
Tarama veya Sıralı Tarama Tüm tabloyu okur Büyük masalarda endişe
Arama veya Dizin Arama Eşleşen satırlara atlar iyi
Kaplama indeksi Yalnızca dizinden yanıtlandı Çok iyi
Sıcaklık B-ağacı veya Sıralama Ekstra ayıklama işi Kontrol etmeye değer

Tam tarama otomatik olarak kötü değildir. Bir sorgu küçük bir tablonun çoğunu gerektiriyorsa tarama en hızlı seçim olabilir. PostgreSQL’in EXPLAIN ANALYZE‘inde ayrıca tahmini satırları gerçek satırlarla karşılaştırın. Büyük bir fark genellikle tablo istatistiklerinin güncel olmadığı anlamına gelir.

Doğru dizini ekleyin

Bu sorgu bir müşterinin siparişlerini bulur:

SELECT id, total FROM orders WHERE customer_id = 123;

Bir dizin eklemeden önce plan tam bir taramaydı:

SCAN orders
-- 20 rows in 73 ms

Daha sonra filtre sütununa bir dizin ekledik:

CREATE INDEX idx_orders_customer ON orders(customer_id);

SEARCH orders USING INDEX idx_orders_customer (customer_id=?)
-- 20 rows in 0.01 ms

Aynı 20 satır binlerce kez daha hızlı geri geldi çünkü veritabanı artık onları bulmak için bir milyon satırı okumuyor. Bu makaledeki başka hiçbir teknik bize daha büyük bir kazanç sağlamadı. İyi ilk adaylar, özellikle sonuçları birkaç satıra daralttıklarında, WHERE, JOIN ve ORDER BY‘te kullanılan sütunlardır. SQL dizinlerine ilişkin kılavuzumuzda bunların nasıl çalıştığı açıklanmaktadır.

Dizinlenmiş sütunları işlevlere sarmayın

Mart ayı siparişlerini bulmanın iki yolu vardır; endeks created‘dedir:

-- Function on the column
SELECT id FROM orders WHERE substr(created, 1, 7) = '2026-03';
-- SCAN orders USING COVERING INDEX idx_orders_created
-- 84,961 rows in 96 ms

-- Plain range
SELECT id FROM orders
WHERE created >= '2026-03-01' AND created < '2026-04-01';
-- SEARCH orders USING COVERING INDEX idx_orders_created (created>? AND created<?)
-- 84,961 rows in 33 ms

Her ikisi de aynı satırları döndürüyor, ancak ilki yaklaşık üç kat daha uzun sürdü. Plan nedenini gösteriyor: sütundaki bir fonksiyonla veritabanı sıralanmış indeksteki bir konuma atlayamaz, dolayısıyla her girişte SCAN olması gerekir. Aralık versiyonu SEARCH doğrudan doğru yere gidebilir. Bir dizini bu şekilde kullanabilen koşula sargable adı verilir.

Aynı sorun şu yaygın kalıplarda da ortaya çıkıyor:

Kaçının Tercih et
NEREDE YIL(oluşturuldu) = 2026 NEREDE oluşturuldu >= '2026-01-01' VE oluşturuldu < '2027-01-01'
NEREDE fiyat * 2 > 100 NEREDE fiyat > 50
NEREDE ALT(e-posta) = 'a@b.com' İşlev tabanlı bir dizin veya büyük/küçük harfe duyarlı olmayan bir harmanlama
NEREDE adı '%99' GİBİ Bir önek araması veya tam metin araması

Sonuncusunu da kontrol ettik. İlk harfe göre sıralanan bir dizin sondaki eşleşmeye yardımcı olamayacağından, önde gelen bir joker karakter SCAN customers üretildi.

Bileşik dizinler

Bir sorgu iki sütunu filtrelediğinde, tek sütunlu dizin işin yalnızca bir kısmını yapar:

SELECT id FROM orders
WHERE status = 'paid'
  AND created >= '2026-03-01' AND created < '2026-03-08';

-- Using only the created index: 6,198 rows in 19 ms

CREATE INDEX idx_status_created ON orders(status, created);

-- SEARCH orders USING COVERING INDEX idx_status_created
--   (status=? AND created>? AND created<?)
-- 6,198 rows in 2.2 ms

Sütun sırası çok önemlidir. (status, created)‘deki dizin, önce soyadına, sonra adına göre sıralanmış bir telefon rehberi gibi çalışır. Yalnızca bir soyadı arayabilirsiniz, ancak yalnızca bir adı arayamazsınız. Yalnızca status‘deki sorgumuz bu dizini kullanabilir. Tek başına created‘e göre filtrelemek genellikle onu verimli bir şekilde kullanamaz. Genel bir kural olarak, eşitlikle test edilen sütunları önce, aralık sütunlarını da arkalarına yerleştirin.

Bu plan aynı zamanda kapsayan dizini de söylüyor; bu, dizinin sorgunun ihtiyaç duyduğu her şeyi barındırdığı, dolayısıyla tablonun kendisinin okunmasına gerek olmadığı anlamına geliyor. Yalnızca ihtiyacınız olan sütunları seçmek bunu daha olası hale getirir, bu da kaçınmanın başka bir nedenidir SELECT *.

Daha hızlı sayfalandırma

Derin sayfalar için OFFSET kullanmak gizli bir maliyettir, çünkü veritabanı hala tüm atlanan satırları geçmek zorundadır:

-- Page deep into the results
SELECT id FROM orders ORDER BY id LIMIT 20 OFFSET 500000;
-- 8.1 ms

-- Keyset pagination: continue from the last id seen
SELECT id FROM orders WHERE id > 500000 ORDER BY id LIMIT 20;
-- 0.01 ms

Tuş seti sayfalandırması ne kadar derine giderseniz gidin hızlı kalır. Ayrıca yeni veriler eklendiğinde satırların sayfalar arasında kaymasını da önler. Buradaki değiş tokuş, kullanıcıların doğrudan 5.000. sayfaya atlayamamasıdır ki bu nadiren gerçek bir ihtiyaçtır. Geniş sıralı veya atlanacak daha fazla satırın olduğu tablolarda boşluk, testimizde olduğundan çok daha büyük olabilir.

İpucu: Zamanlamalarımız, boşta olan bir makinede aynı anda bir sorguyu ölçer. Gerçek yük altında verimsiz bir sorgu daha fazla hasara yol açar çünkü aynı zamanda kilitleri de tutar ve bellek, disk ve CPU için diğer her şeyle rekabet eder.

Daha yalın sorgular yazın

  • Yalnızca ihtiyacınız olan sütunları seçin. SELECT * daha fazla veri gönderir ve bir dizinin sorguyu kapsamasını engelleyebilir.
  • Erken filtreleyin. Gruplandırmadan önce satırları kaldırmak için WHERE‘yi, yalnızca toplamalara ilişkin koşullar için HAVING‘ü kullanın. Bkz. SQL GRUPLAMAYA GÖRE ve HAVING.
  • Yalnızca birkaç satıra ihtiyacınız olduğunda LIMIT’i kullanın.
  • Kopyaların kaldırılmasına ihtiyacınız olmadığında UNION ALL’ı tercih edin. UNION ve UNION ALL testimiz bunun neleri kurtardığını gösteriyor.
  • Gereksiz DISTINCT’ten kaçının. Genellikle kopyalar üreten bir birleştirmeyi gizler.
  • Varlık kontrolleri için EXISTS’i kullanın. SQL alt sorgularına ilişkin kılavuzumuzun açıkladığı gibi, ilk eşleşmede durabilir.
  • N+1 sorguya dikkat edin. Bir döngüdeki satır başına bir sorgu, genellikle uygulama kodunun neden olduğu, çoğu zaman asıl sorundur. Tek bir birleştirme veya toplu sorgu, yüzlerce gidiş-dönüş yolculuğun yerini alabilir.

Katılıyor

Katıldığınız sütunları indeksleyin. Bir şehirdeki müşteriler için toplam harcama raporu hazırladık ve plan tam da beklediğiniz gibiydi:

SELECT c.name, SUM(o.total)
FROM customers c
JOIN orders o ON o.customer_id = c.id
WHERE c.city = 'Goa'
GROUP BY c.id;

-- SCAN c
-- SEARCH o USING COVERING INDEX idx_cover (customer_id=?)
-- 9,900 rows in 34 ms

Müşterileri tarar ve ardından her birinin siparişlerini bulmak için bir dizin kullanır. orders.customer_id‘de bir indeks olmasaydı, veritabanının her müşteri için çok daha fazla iş yapması gerekecekti. Yabancı anahtardaki bir dizin, yapabileceğiniz en yaygın ve değerli eklemelerden biridir. Temel bilgilerle ilgili anlayışınızı tazelemek için SQL birleştirmelerinin açıklamasına bakın.

Endekslerin size maliyeti olduğunda

Dizinler ücretsiz değildir, bu nedenle her sütun için bir tane eklemeyin:

  • Daha yavaş yazma. Her ekleme, güncelleme ve silme işlemi aynı zamanda her dizini de güncellemelidir.
  • Daha fazla depolama ve bellek. Büyük tablolarda dizinler büyüyebilir.
  • Seçici olmayan sütunlarda çok az fayda var. Çoğu satırın eşleşmesi durumunda doğru veya yanlış sütundaki dizin işe yaramayabilir.
  • Yedeklilik. Zaten (a, b) üzerinde bir dizine sahipseniz, (a) üzerinde bir dizin genellikle gereksizdir.

Kullanım istatistiklerini düzenli aralıklarla kontrol edin ve hiçbir şeyin kullanmadığı dizinleri kaldırın. Ve istatistikleri ANALYZE veya veritabanınızın eşdeğeri ile güncel tutun, çünkü optimize edici iyi bir plan seçmek için bunlara güvenir. Bazen yavaş kısım sorgudan ziyade çekişmedir. Kilitleri uzun süre çalıştıran işlemler, hızlı bir sorgunun yavaş görünmesine neden olabilir.

Yaygın hatalar

  • Ölçüm yapmadan optimizasyon. Pek çok kendinden emin tahminin yanlış olduğu ortaya çıkıyor.
  • Küçük verilerle test etme. Tablolar büyüdükçe planlar ve zamanlamalar önemli ölçüde değişir.
  • Başka bir veritabanı için verilen bir ipucuna güvenmek. Bir motor için verilen tavsiye, diğeri için geçerli olmayabilir.
  • Dizinleri körü körüne ekleme. Her biri yazmayı yavaşlatır.
  • İlk çalıştırma efekti göz ardı ediliyor. Önbellekler ikinci çalıştırmayı daha hızlı hale getirir, bu nedenle birkaç kez çalıştırın.

Son sözler

Yavaş sorguların çoğunun sıradan nedenleri vardır: eksik bir dizin, bir sütundaki işlev veya çok fazla veri getiriliyor. Bu hafta en yavaş gerçek sorgunuzu alın, üzerinde EXPLAIN çalıştırın ve büyük bir tabloda tam tarama arayın. Bir şeyi düzeltin, tekrar ölçün ve değiştirdiğiniz şeyleri not edin.

Sık sorulan sorular

SQL sorgu optimizasyonu nedir?

Genellikle yürütme planlarını inceleyerek, uygun dizinler ekleyerek ve verimsiz sorguları yeniden yazarak sorguların daha az zaman ve daha az kaynak kullanmasını sağlama sürecidir.

Yürütme planı nedir?

Tabloları nasıl okuduğu, hangi dizinleri kullandığı ve hangi sıraya katıldığı da dahil olmak üzere, veritabanının bir sorguyu çalıştırmak için seçtiği stratejidir.

Yavaş sorguları nasıl bulurum?

Veritabanınızın yavaş sorgu günlüğünü etkinleştirin veya PostgreSQL’de pg_stat_statements gibi araçları kullanın. Daha sonra toplam süresi en yüksek olan sorgulara odaklanın.

Dizin eklemek her zaman sorguları daha hızlı hale getirir mi?

Hayır. Seçmeli okumaya yardımcı olur ancak yazma işlemini yavaşlatır ve depolamayı kullanır. Optimize edici, çoğu satırın koşulla eşleşmesi durumunda da bunu göz ardı edebilir.

SELECT * performans açısından kötü mü?

Olabilir. Gereksiz verileri aktarır ve bir dizinin sorguyu kapsamasını engelleyebilir. Yalnızca ihtiyacınız olan sütunları listelemek genellikle daha iyidir.

Öğrenmeye devam et

Stack Quora ile çalışın

Test, WordPress veya SEO konusunda yardıma mı ihtiyacınız var?

Ekiplerin daha iyi yazılımlar sunmasına ve sitelerini büyütmesine yardımcı oluyoruz. Bize ne üzerinde çalıştığınızı söyleyin, biz de bir sonraki adım için net bir öneride bulunalım.

Okumaya devam et

Daha fazla kılavuz test, yapay zeka ve modern geliştirme

Bu makaleyi beğendiniz mi? Bir konu seçin ve doğrudan en yeni eğitimlerimize geçin.

Yapay zekâ

Yapay Zeka Halüsinasyonları Açıklandı: Dil Modelleri Neden İşleri Düzeltiyor ve Nasıl Azaltılabilir?

Yapay zeka halüsinasyonları açıkladı: ne olduklarını, dil modellerinin bunları neden ürettiğini, yaygın türlerini, temellendirme ve yönlendirmelerle…

Makaleyi okuyun →
DevOps

Açıklanan Ortam Değişkenleri: .env Dosyaları, Sırlar ve Yapılandırma Doğru Yapıldı

Çalıştırdığımız Python örnekleriyle açıklanan ortam değişkenleri: bunları okumak ve ayarlamak, neden her değerin bir dize olduğu, .env dosyaları, sü…

Makaleyi okuyun →
Yazılım geliştirme

API Hız Sınırlamasının Açıklaması: Algoritmalar, Başlıklar ve 429 Hatalarının Ele Alınması

API hızı sınırlaması, çalıştırdığımız bir simülasyonla açıklanmıştır: belirteç kümesi, sabit pencere, kayan pencere, 429 yanıt, hız sınırı başlıklar…

Makaleyi okuyun →
Test otomasyonu

Python'da alay etme: Unittest.mock, patch ve Testleri Yalan Yapan Hatalar

Unittest.mock ile Python'da alay etme, test edildi: Sahte ve dönüş_değeri, yan_etki, bir adın kullanıldığı yerde yama uygulama, spesifikasyon ve oto…

Makaleyi okuyun →
Yazılım testi

Kod Kapsamının Açıklaması: Hat ve Şube Kapsamı ve %100'ün Gerçek Anlamı

Kod kapsamı gerçek bir kapsama.py çalışmasıyla açıklanmıştır: hat, şube ve durum kapsamı, bir raporun okunması, %100 kapsamın neden hâlâ hataları ka…

Makaleyi okuyun →
Veritabanları ve SQL

SQL'de DELETE vs TRUNCATE vs DROP: Farklılıklar, Geri Alma ve Her Biri Ne Zaman Kullanılmalı

DELETE vs TRUNCATE vs DROP test edilmiş SQL ile açıklandı: her birinin neyi kaldırdığı, geri aldığı, tetiklediği, kimlik sıfırlaması, hızı ve Postgr…

Makaleyi okuyun →
Veritabanları ve SQL

Açıklanan SQL Görünümleri: Örneklerle Tuzakları Oluşturun, Kullanın ve Önleyin

Çalıştırdığımız sorgularla açıklanan SQL görünümleri: görünüm oluşturma, canlı sonuçlar, sütunları gizleme, performans, güncellenebilir ve gerçekleş…

Makaleyi okuyun →
Yazılım geliştirme

TypeScript Arayüzü ve Tür: Gerçek Farklılıklar, Derleyiciyle Test Edildi

TypeScript arayüzü ve türü, gerçek derleyiciyle kontrol edildi: her ikisinin de yapabileceği, yalnızca birinin yapabileceği, bildirim birleştirme, g…

Makaleyi okuyun →
Yazılım geliştirme

Python *args ve **kwargs'ın Açıklaması: Açık Örneklerle Esnek Fonksiyonlar

Python *args ve **kwargs çalıştırdığımız kodla açıklanmıştır: paketleme ve paketten çıkarma, parametre sırası, yalnızca anahtar kelime ve yalnızca k…

Makaleyi okuyun →
Yazılım geliştirme

Python Lambda İşlevleri: Söz Dizimi, Gerçek Kullanımlar ve Ne Zaman Kullanılmaması Gerektiği

Çalıştırdığımız kodla açıklanan Python lambda işlevleri: sözdizimi, anahtarla sıralama, harita ve filtre, kapatmalar, geç bağlama tuzağı ve normal b…

Makaleyi okuyun →
Yapay zekâ

Yapay Zeka Ajanları Nelerdir? Çalıştırabileceğiniz Basit Bir Aracı Döngüsüyle Nasıl Çalışırlar?

Yapay zeka ajanları nedir? Aracı döngüsüne, araçlara, belleğe ve korkuluklara ilişkin basit bir kılavuz, çalıştırdığımız küçük bir Python döngüsü, g…

Makaleyi okuyun →
DevOps

İzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark

İzleme ve gözlemlenebilirliğin açıklanması: bilinen ve bilinmeyen arızalar, günlükler, ölçümler ve izler, ödeme olayının gözden geçirilmesi, altın s…

Makaleyi okuyun →
DevOps

Docker Birimleri ve Bağlama Bağlantıları: Konteyner Verilerini Doğru Şekilde Kalıcılaştırın

Docker birimleri ile bağlama bağlamaları arasındaki karşılaştırma açıklandı: kapsayıcı verilerinin neden kaybolduğu, adlandırılmış birimler, bağlama…

Makaleyi okuyun →
Test otomasyonu

TDD ve BDD: Temel Farklılıklar, Her İki Şekilde Geliştirilmiş Bir Özellik ve Her Birinin Ne Zaman Kullanılacağı

TDD ve BDD, her iki yönde de oluşturulmuş bir indirim özelliğiyle açıklandı: çalıştırdığımız kodla kırmızı-yeşil-refactor, Verilen-Ne Zaman-O Zaman …

Makaleyi okuyun →
Yazılım testi

Kullanıcı Kabul Testi (UAT): Süreç, Kontrol Listesi ve Gerçek Örnekler

Kullanıcı kabul testi açıklandı: bunu kimin yürüttüğü, QA'dan farkı, yedi adımlı bir süreç, bir UAT test senaryosu şablonu, bir kontrol listesi, otu…

Makaleyi okuyun →
Veritabanları ve SQL

Açıklanan SQL NULL Değerleri: IS NULL, COALESCE, NULLIF ve Kaçınılması Gereken Tuzaklar

SQL NULL değerleri, çalıştırdığımız sorgularla açıklandı: üç değerli mantık, IS NULL, COALESCE, NULLIF, toplamaların, birleştirmelerin ve sıralamanı…

Makaleyi okuyun →
Veritabanları ve SQL

SQL CASE WHEN İfadesi: Sözdizimi, Gerçek Örnekler ve Yaygın Hatalar

SQL CASE WHEN çalıştırdığımız sorgularla açıkladı: basit ve aranmış formlar, koşul sırası, SUM'lu pivotlar, COUNT hileleri, özel sıralama, güncellem…

Makaleyi okuyun →
Yazılım geliştirme

JWT Nedir? JSON Web Belirteçleri Bir Çalışma Örneğiyle Açıklanıyor

JWT nedir? JSON Web Tokens açıkladı: üç bölüm, çalıştırdığımız kodda oluşturulan ve üzerinde değişiklik yapılan bir token, JWT ile oturumlar, depola…

Makaleyi okuyun →
Yazılım geliştirme

JavaScript Olay Döngüsü Açıklaması: Örneklerle Çağrı Yığını, Mikro Görevler ve Zamanlayıcılar

JavaScript olay döngüsü çalıştırdığımız kodla açıklandı: çağrı yığını, görev ve mikro görev kuyrukları, setTimeout 0'ın neden anında olmadığı, engel…

Makaleyi okuyun →
Yazılım geliştirme

Python Jeneratörleri ve Verim Açıklaması: Gerçek Örneklerle Bellekten Tasarruf Edin

Python üreteçleri ve verim, çalıştırdığımız kodla açıklandı: nasıl duraklatılır ve devam ettirilir, ölçülen bellek tasarrufları, işlem hatları, sons…

Makaleyi okuyun →
Yapay zekâ

Gömmeler Nelerdir? Vektörler ve Kosinüs Benzerliği Basitçe Açıklandı

Gömmeler nedir? Vektörler, kosinüs benzerliği ve anlamsal aramaya ilişkin sade dilli bir kılavuz; çalıştırdığımız küçük bir örnek, yaygın kullanımla…

Makaleyi okuyun →
DevOps

Mavi-Yeşil ve Kanarya Konuşlandırılması: Farklılıklar, Takaslar ve Nasıl Seçilir

Mavi-yeşil ve kanarya konuşlandırması açıklandı: her birinin nasıl çalıştığı, maliyet, risk ve geri alma, test ettiğimiz istikrarlı kullanıcı grubu,…

Makaleyi okuyun →
Test otomasyonu

Kesintili Testler: Bunların Sebepleri ve Nasıl Düzeltileceği

Yaptığımız demolarla açıklanan hatalı testler: ana nedenler, birinin nasıl doğrulanacağı ve teşhis edileceği, zamanlama için uygun düzeltmeler, payl…

Makaleyi okuyun →
Yazılım testi

Yük Testi ve Stres Testi: Farklılıklar, Metrikler ve k6 Örnekleri

Yük testi ve stres testinin açıklaması: her birinin neyi kanıtladığı, ani yükselme ve soğuma testleri, önemli ölçümler, ortalamaların neden yanıltıc…

Makaleyi okuyun →
Yazılım testi

Test Senaryosu ve Test Senaryosu: Temel Farklılıklar, Örnekler ve Her Biri Ne Zaman Kullanılmalı?

Test senaryosu ve test senaryosunun açıklaması: net tanımlar, yan yana tablo, senaryolardan vakalara, şablonlara ve her birinin ne zaman kullanılaca…

Makaleyi okuyun →
Veritabanları ve SQL

SQL Sorgu Optimizasyonu: Zamanlamalarla Yürütme Planlarını Okuyun ve Yavaş Sorguları Düzeltin

SQL sorgu optimizasyonu bir milyon satırda test edilmiştir: yürütme planlarını okuyun, doğru dizinleri ekleyin, değiştirilemeyen filtreleri düzeltin…

Makaleyi okuyun →
Veritabanları ve SQL

SQL UNION ve UNION ALL: Farklılıklar, Örnekler ve Test Edilmiş Performans

SQL UNION ve UNION ALL, yürüttüğümüz sorgularla açıklandı: kopyalar, her ikisinin de takip ettiği kurallar, gerçek bir veri hatası, ölçülen performa…

Makaleyi okuyun →
Yazılım geliştirme

JavaScript Fetch API Eğitimi: GET, POST, Hata İşleme ve Zaman Aşımları

Yerel bir sunucuya karşı test edilen bir JavaScript Fetch API öğreticisi: GET ve POST, 404'ün neden atmadığı, yeniden kullanılabilir bir yardımcı, s…

Makaleyi okuyun →
Yazılım geliştirme

Python Dosya İşleme: Örneklerle Okuma, Yazma, CSV, JSON ve pathlib

Python dosya işleme, çalıştırdığımız kodla açıklanmıştır: açık modlar, büyük dosyaları okuma, CSV, JSON, pathlib, ikili dosyalar, güvenli yazma, hat…

Makaleyi okuyun →
Yazılım geliştirme

Python Sınıfları ve Nesneleri: Gerçek Örneklerle OOP Eğitimi

Çalıştırdığımız kodla açıklanan Python sınıfları ve nesneleri: __init__, yöntemler, sınıf ve örnek nitelikleri, kalıtım, özellikler, dunder yöntemle…

Makaleyi okuyun →
Yapay zekâ

Büyük Dil Modeli Nedir? Yüksek Lisans'ların Nasıl Çalıştığı, Abartmadan Açıklanıyor

Büyük dil modeli nedir? LLM'ler sade bir dille açıklandı: belirteçler, yerleştirmeler, dikkat, eğitim, sıcaklık ve bağlam pencereleri, küçük bir son…

Makaleyi okuyun →
DevOps

Yeni Başlayanlar İçin Linux Komutları: Örneklerle Temel Terminal Kılavuzu

Yeni başlayanlar için göreve göre gruplandırılmış Linux komutları: pratik bir günlük analizi örneğiyle gezinme, dosyalar, günlükleri görüntüleme, gr…

Makaleyi okuyun →
Test otomasyonu

Selenyum ve Oyun Yazarı: Temel Farklılıklar, Karşılaştırılan Kod ve Hangisinin Seçileceği

Selenium ve Playwright karşılaştırması: mimari, bekleme, tarayıcı ve dil desteği, hata ayıklama, her iki araçta da aynı test, geçiş tavsiyesi ve nas…

Makaleyi okuyun →
Yazılım testi

Eşdeğerlik Bölümleme: Test Tasarımı Tekniğinin Çalışılmış Örneklerle Açıklanması

Eşdeğerlik bölümlemenin açıklaması: geçerli ve geçersiz bölümlerin nasıl bulunacağı, yaşlara yönelik çalışılmış örnekler, şifreler ve kuponlar, yürü…

Makaleyi okuyun →
Yazılım testi

Yazılım Testinde Şiddet ve Öncelik: Farklılıklar, Matris ve Gerçek Örnekler

Yazılım testinde önem ve önceliğin açıklanması: net tanımlar, örnekler içeren dört yönlü bir matris, seviye ölçekleri, her birini kimin belirlediği …

Makaleyi okuyun →
Veritabanları ve SQL

SQL Alt Sorguları Eğitimi: Türler, İlişkili Alt Sorgular ve Örneklerle EXISTS

Çalıştırdığımız sorguları içeren bir SQL alt sorgu eğitimi: skaler, IN, FROM ve SELECT alt sorguları, ilişkili alt sorgular, EXISTS, NOT IN NULL tuz…

Makaleyi okuyun →
Veritabanları ve SQL

SQL İşlemleri ve ACID Açıklaması: COMMIT, ROLLBACK ve İzolasyon Seviyeleri

SQL işlemleri ve ACID, yürüttüğümüz bir banka transferiyle açıklandı: COMMIT, ROLLBACK, kayıt noktaları, kilitler, izolasyon seviyeleri, kirli okuma…

Makaleyi okuyun →
Yazılım geliştirme

Git Komutları Hile Sayfası: Gerçekte Kullandığınız Komutlar, Örneklerle

Git komutları göreve göre gruplandırılmış kısa bilgiler sayfası: kurulum, aşamalandırma, dallar, uzaktan kumandalar, saklama, geçmiş ve gerçek bir d…

Makaleyi okuyun →
Yazılım geliştirme

JavaScript Vaatlerinin Açıklaması: ardından, catch, Promise.all ve Yaygın Hatalar

Çalıştırdığımız kodla açıklanan JavaScript vaatleri: durumlar, ardından ve yakalama zincirleri, hata yönetimi, Promise.all, allSettled, yarış ve her…

Makaleyi okuyun →
Yazılım geliştirme

Python Sözlüğü Eğitimi: Yöntemler, Örnekler ve Ortak Kalıplar

Çalıştırdığımız kodları içeren bir Python sözlüğü eğitimi: dikteler oluşturma, okuma ve güncelleme, temel yöntemler, birleştirme, kavramalar, sayma …

Makaleyi okuyun →
Yapay zekâ

RAG Nedir? Geri Almayla Artırılmış Üretim Bir Çalışma Örneğiyle Açıklanıyor

RAG nedir? Almayla artırılmış oluşturma adım adım açıklanmıştır: indeksleme, parçalama, yerleştirmeler, alma, çalışan küçük bir Python örneği, değer…

Makaleyi okuyun →
DevOps

Yeni Başlayanlar İçin Terraform Eğitimi: İlk Dosyadan Modüllere Kod Olarak Altyapı

Yeni başlayanlar için bir Terraform eğitimi: Bulut hesabı olmadan başlayın, başlatmayı öğrenin, planlayın ve uygulayın, ardından değişkenler, çıktıl…

Makaleyi okuyun →
DevOps

Docker ve Kubernetes: Temel Farklılıklar, Birlikte Nasıl Çalıştıkları ve İhtiyacınız Olanlar

Docker ve Kubernetes şöyle açıkladı: Her birinin ne yaptığı, her ikisinde de aynı uygulamanın çalıştırılması, Docker Compose ve Swarm'ın karşılaştır…

Makaleyi okuyun →
Test otomasyonu

Yeni Başlayanlar İçin Pytest Eğitimi: Fikstürler, Parametrelendirme ve Gerçek Örnekler

Yeni başlayanlar için pytest 9.2'de yürüttüğümüz testleri içeren bir pytest öğreticisi: iddialar, fikstürler, parametrelendirme, yarışma, işaretleyi…

Makaleyi okuyun →
Yazılım testi

Yazılım Test Yaşam Döngüsü (STLC): 6 Aşama, Giriş ve Çıkış Kriterleri, Örnek

Yazılım testi yaşam döngüsü şunları açıkladı: giriş ve çıkış kriterleri, teslimatlar, çalışılmış bir oturum açma özelliği örneği, Agile'da STLC ve S…

Makaleyi okuyun →
Yazılım geliştirme

Git merge vs rebase: farklar, örnekler ve hangisi ne zaman kullanılır

Git merge vs rebase; gerçek log çıktısı, karşılaştırma tablosu, rebase'in altın kuralı ve güvenli bir ekip iş akışıyla anlatılıyor.

Makaleyi okuyun →
Yazılım geliştirme

Python Liste Üreteci (List Comprehension): Sözdizimi, Örnekler ve Kaçınılacak Durumlar

Python list comprehension anlatımı: sözdizimi, filtreleme, if-else, iç içe döngüler, ölçülmüş süreler ve düz for döngüsünün daha iyi olduğu durumlar.

Makaleyi okuyun →
Veritabanları ve SQL

SQL JOIN Örneklerle Açıklama (Inner, Left, Right, Full)

SQL JOIN'leri örnek tablolar ve sorgularla adım adım öğrenin: INNER, LEFT, RIGHT, FULL, CROSS ve SELF; yaygın hatalar ve performans ipuçları.

Makaleyi okuyun →