{"id":7015,"date":"2025-10-05T10:00:00","date_gmt":"2025-10-05T07:00:00","guid":{"rendered":"https:\/\/yazilimyap.com\/?p=7015"},"modified":"2025-10-05T10:00:00","modified_gmt":"2025-10-05T07:00:00","slug":"sql-performansini-artirmak-icin-7-etkili-sorgu-optimizasyonu-teknigi","status":"publish","type":"post","link":"https:\/\/yazilimyap.com\/index.php\/2025\/10\/05\/sql-performansini-artirmak-icin-7-etkili-sorgu-optimizasyonu-teknigi\/","title":{"rendered":"SQL Performans\u0131n\u0131 Art\u0131rmak \u0130\u00e7in 7 Etkili Sorgu Optimizasyonu Tekni\u011fi"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Veri taban\u0131 performans\u0131, bir yaz\u0131l\u0131m uygulamas\u0131n\u0131n kullan\u0131c\u0131 deneyimi, sistem kararl\u0131l\u0131\u011f\u0131 ve i\u015fletme maliyetleri \u00fczerinde do\u011frudan etkiye sahiptir. \u00d6zellikle <strong>b\u00fcy\u00fck veri setlerine<\/strong> sahip sistemlerde, <strong>yava\u015f \u00e7al\u0131\u015fan SQL sorgular\u0131<\/strong>, uygulaman\u0131n genel h\u0131z\u0131n\u0131 ciddi \u015fekilde d\u00fc\u015f\u00fcrebilir. Neyse ki, do\u011fru tekniklerle <strong>SQL performans\u0131n\u0131<\/strong> \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirsiniz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu makalede, <strong>sorgu optimizasyonu<\/strong> ve <strong>indeks kullan\u0131m\u0131<\/strong> ba\u015fta olmak \u00fczere, veri taban\u0131 performans\u0131n\u0131 art\u0131rmak i\u00e7in uygulanabilecek pratik ve etkili teknikleri ele alaca\u011f\u0131z. Hem ba\u015flang\u0131\u00e7 seviyesindeki geli\u015ftiriciler hem de deneyimli DBA\u2019lar (Veri taban\u0131 Y\u00f6neticileri) i\u00e7in faydal\u0131 bilgiler sunulacakt\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Neden SQL Performans\u0131 \u00d6nemlidir?<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Yava\u015f sorgular, yaln\u0131zca \u201cbekleme s\u00fcresi\u201d sorunu yaratmaz. Bunun yan\u0131 s\u0131ra:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sunucu kaynaklar\u0131n\u0131 (CPU, RAM, I\/O) gereksiz yere t\u00fcketir<\/li>\n\n\n\n<li>Kullan\u0131c\u0131 deneyimini olumsuz etkiler<\/li>\n\n\n\n<li>\u00d6l\u00e7eklenebilirli\u011fi s\u0131n\u0131rlar<\/li>\n\n\n\n<li>\u0130\u015f s\u00fcreklili\u011fini tehdit edebilir (\u00f6zellikle kritik sistemlerde)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6zellikle e-ticaret siteleri, finansal platformlar veya analitik sistemler gibi y\u00fcksek trafi\u011fe sahip uygulamalarda, <strong>milisaniyelik gecikmeler bile milyonlarca kayba<\/strong> yol a\u00e7abilir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. SQL Sorgu Optimizasyonu: Temel \u0130lkeler<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Gereksiz Veri \u00c7ekmeyin: SELECT * Kullanmay\u0131n<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En yayg\u0131n hatalardan biri, ihtiyac\u0131n\u0131z olmayan t\u00fcm s\u00fctunlar\u0131 \u00e7ekmek i\u00e7in <code>SELECT *<\/code> kullanmakt\u0131r.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- K\u00f6t\u00fc kullan\u0131m\nSELECT * FROM customers;\n\n-- \u0130yi kullan\u0131m\nSELECT id, name, email FROM customers;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sadece gerekli s\u00fctunlar\u0131 se\u00e7mek, a\u011f trafi\u011fini azalt\u0131r ve sorgu s\u00fcresini k\u0131salt\u0131r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>WHERE Ko\u015fullar\u0131n\u0131 Ak\u0131ll\u0131ca Kullan\u0131n<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Filtreleme, m\u00fcmk\u00fcn oldu\u011funca erken yap\u0131lmal\u0131d\u0131r.<\/li>\n\n\n\n<li><code>LIKE '%de\u011fer%'<\/code> yerine <code>LIKE 'de\u011fer%'<\/code> kullan\u0131n (ilk kullan\u0131m indeks kullan\u0131lamaz).<\/li>\n\n\n\n<li>Fonksiyonlar WHERE i\u00e7inde s\u00fctunlara uygulanmamal\u0131d\u0131r:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>-- K\u00f6t\u00fc: indeks kullan\u0131lamaz\n\nSELECT * FROM users WHERE YEAR(created_at) = 2023;\n\n-- \u0130yi: indeks kullan\u0131labilir\n\nSELECT * FROM users WHERE created_at &gt;= '2023-01-01' AND created_at &lt; '2024-01-01';<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>JOIN Kullan\u0131m\u0131nda Dikkat Edin<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gereksiz JOIN\u2019ler sorguyu yava\u015flat\u0131r.<\/li>\n\n\n\n<li>JOIN yap\u0131lan tablolar mutlaka <strong>foreign key<\/strong> ve <strong>indeksli s\u00fctunlar<\/strong> \u00fczerinden yap\u0131lmal\u0131d\u0131r.<\/li>\n\n\n\n<li>B\u00fcy\u00fck tablolarla JOIN yaparken, \u00f6nce filtreleme yap\u0131n (alt sorgu veya CTE ile).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. SQL \u0130ndeks Kullan\u0131m\u0131: Performans\u0131n Anahtar\u0131<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u0130ndeks Nedir?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0130ndeks, veri taban\u0131nda bir tablonun belirli s\u00fctunlar\u0131na g\u00f6re h\u0131zl\u0131 arama yap\u0131labilmesini sa\u011flayan bir veri yap\u0131s\u0131d\u0131r. Kitaplar\u0131n i\u00e7indeki \u201ckay\u0131t dizini\u201dne benzetilebilir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Ne Zaman \u0130ndeks Olu\u015fturulmal\u0131?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>S\u0131k\u00e7a filtrelenen (<code>WHERE<\/code>) s\u00fctunlar<\/li>\n\n\n\n<li><code>JOIN<\/code> i\u015flemleri yap\u0131lan s\u00fctunlar<\/li>\n\n\n\n<li><code>ORDER BY<\/code> veya <code>GROUP BY<\/code> kullan\u0131lan s\u00fctunlar<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">SQL <strong>\u0130ndeks T\u00fcrleri ve Kullan\u0131m Senaryolar\u0131<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u0130NDEX T\u00dcR\u00dc<\/th><th>A\u00c7IKLAMA<\/th><th>KULLANIM \u00d6RNE\u011e\u0130<\/th><\/tr><\/thead><tbody><tr><td><strong>Tek S\u00fctunlu \u0130ndeks<\/strong><\/td><td>Tek bir s\u00fctun i\u00e7in<\/td><td><code>email<\/code>s\u00fctunu<\/td><\/tr><tr><td><strong>Bile\u015fik \u0130ndeks<\/strong><\/td><td>Birden fazla s\u00fctun<\/td><td><code>(city, age)<\/code><\/td><\/tr><tr><td><strong>Benzersiz \u0130ndeks<\/strong><\/td><td>Tekrar\u0131 engeller<\/td><td><code>user_id<\/code><\/td><\/tr><tr><td><strong>Kapsayan \u0130ndeks<\/strong><\/td><td>Sorgu sonucunu tamamen indeksten d\u00f6nd\u00fcr\u00fcr<\/td><td>Performans kritik sorgular<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/yazilimyap.com\/wp-content\/uploads\/2025\/10\/408.png\" alt=\"sql\" class=\"wp-image-7021\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u0130ndeks Kullan\u0131m\u0131nda Dikkat Edilmesi Gerekenler<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Her indeks, <strong>yazma i\u015flemleri<\/strong> (INSERT, UPDATE, DELETE) s\u0131ras\u0131nda ek y\u00fck getirir.<\/li>\n\n\n\n<li>A\u015f\u0131r\u0131 indeksleme, depolama ve bak\u0131m maliyetini art\u0131r\u0131r.<\/li>\n\n\n\n<li>\u0130ndeksler periyodik olarak <strong>analiz edilmeli<\/strong> ve gereksiz olanlar silinmelidir.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. SQL Sorgu Plan\u0131 (Execution Plan) Analizi<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Modern veri taban\u0131 sistemleri (PostgreSQL, SQL Server, MySQL 8.0+), sorgular\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6steren <strong>execution plan<\/strong> (\u00e7al\u0131\u015ft\u0131rma plan\u0131) sunar.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>EXPLAIN<\/strong> komutu ile sorgu plan\u0131 g\u00f6r\u00fcnt\u00fclenebilir:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>EXPLAIN SELECT * FROM orders WHERE customer_id=123;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bu \u00e7\u0131kt\u0131da dikkat edilmesi gerekenler:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Full Table Scan<\/strong> varsa \u2192 indeks eksikli\u011fi<\/li>\n\n\n\n<li><strong>Nested Loop<\/strong> \u00e7ok fazlaysa \u2192 JOIN optimizasyonu gerekli<\/li>\n\n\n\n<li><strong>High Cost<\/strong> de\u011ferleri \u2192 sorgu yeniden yaz\u0131lmal\u0131<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>\u0130pucu:<\/strong> PostgreSQL\u2019te <code>EXPLAIN (ANALYZE, BUFFERS)<\/code> komutu, ger\u00e7ek performans verilerini de g\u00f6sterir.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Veri taban\u0131 Yap\u0131sal Optimizasyonlar<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Veri Tiplerini Do\u011fru Se\u00e7in<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>VARCHAR(255)<\/code> yerine ihtiyaca g\u00f6re <code>VARCHAR(50)<\/code> kullan\u0131n.<\/li>\n\n\n\n<li>Tamsay\u0131lar i\u00e7in <code>INT<\/code> yerine <code>SMALLINT<\/code> veya <code>TINYINT<\/code> tercih edin.<\/li>\n\n\n\n<li>Tarih\/saat i\u00e7in <code>DATETIME<\/code> yerine <code>DATE<\/code> (e\u011fer saat gerekmiyorsa).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">K\u00fc\u00e7\u00fck veri tipleri, daha az disk alan\u0131 kaplar ve bellek eri\u015fimini h\u0131zland\u0131r\u0131r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>SQL Tablolar\u0131 B\u00f6l\u00fcmleyin (Partitioning)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Milyonlarca sat\u0131r\u0131 olan tablolar\u0131, tarih veya b\u00f6lge gibi kriterlere g\u00f6re <strong>b\u00f6l\u00fcmlere<\/strong> ay\u0131rarak sorgu performans\u0131 art\u0131r\u0131labilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6rnek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- PostgreSQL\u2019te tarihe g\u00f6re b\u00f6l\u00fcmleme\n\nCREATE TABLE sales_2023 PARTITION OF sales FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. \u00d6nbellekleme ve Uygulama Katman\u0131 Optimizasyonu<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Baz\u0131 sorgular, veri taban\u0131 seviyesinde de\u011fil, <strong>uygulama seviyesinde<\/strong> \u00f6nbelle\u011fe al\u0131narak h\u0131zland\u0131r\u0131labilir.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Redis<\/strong> veya <strong>Memcached<\/strong> ile s\u0131k kullan\u0131lan sonu\u00e7lar saklanabilir.<\/li>\n\n\n\n<li><strong>Pagination<\/strong> (sayfalama) ile b\u00fcy\u00fck sonu\u00e7 k\u00fcmeleri b\u00f6l\u00fcnebilir:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT * FROM products ORDER BY id LIMIT 20 OFFSET 40;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. Periyodik Bak\u0131m ve \u0130zleme<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Performans optimizasyonu bir kerelik bir i\u015f de\u011fildir. S\u00fcrekli izleme gerekir:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Yava\u015f sorgu loglar\u0131n\u0131<\/strong> (slow query log) inceleyin.<\/li>\n\n\n\n<li><strong>Veri taban\u0131 istatistiklerini<\/strong> g\u00fcncel tutun (<code>ANALYZE<\/code> komutu).<\/li>\n\n\n\n<li><strong>Fragmentasyonu<\/strong> azaltmak i\u00e7in tablolar\u0131 periyodik olarak yeniden olu\u015fturun (\u00f6zellikle SQL Server\u2019da).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>7. Ger\u00e7ek Hayattan \u00d6rnek: E-Ticaret Sistemi<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bir e-ticaret sitesinde \u201cson 30 g\u00fcn\u00fcn en \u00e7ok satan \u00fcr\u00fcnleri\u201d sorgusu ba\u015flang\u0131\u00e7ta 8 saniye s\u00fcr\u00fcyordu. Uygulanan iyile\u015ftirmeler:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><code>orders<\/code> ve <code>order_items<\/code> tablolar\u0131nda <code>order_date<\/code> ve <code>product_id<\/code> i\u00e7in bile\u015fik indeks olu\u015fturuldu.<\/li>\n\n\n\n<li><code>SELECT *<\/code> yerine sadece gerekli s\u00fctunlar se\u00e7ildi.<\/li>\n\n\n\n<li>Sorgu, <code>WHERE order_date &gt;= '2024-03-01'<\/code> \u015feklinde yeniden yaz\u0131ld\u0131.<\/li>\n\n\n\n<li>Sonu\u00e7: <strong>Sorgu s\u00fcresi 0.12 saniyeye d\u00fc\u015ft\u00fc.<\/strong><\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Sonu\u00e7: Performans, Detaylarda Gizlidir<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SQL performans iyile\u015ftirme<\/strong>, sadece \u201cdaha g\u00fc\u00e7l\u00fc sunucu almak\u201dla de\u011fil, <strong>ak\u0131ll\u0131ca sorgu yazmak<\/strong>, <strong>do\u011fru indekslemek<\/strong> ve <strong>s\u00fcrekli izlemek<\/strong>le sa\u011flan\u0131r. Bu makalede payla\u015ft\u0131\u011f\u0131m\u0131z teknikler, \u00e7o\u011fu projede an\u0131nda fark yaratabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unutmay\u0131n:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201c\u0130yi bir sorgu, veri taban\u0131n\u0131n dilini anlayan bir geli\u015ftiricinin elinden \u00e7\u0131kar.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Performans sorunlar\u0131n\u0131z varsa, \u00f6nce sorgular\u0131n\u0131z\u0131 ve indeks stratejinizi g\u00f6zden ge\u00e7irin. Genellikle \u00e7\u00f6z\u00fcm, kodunuzun i\u00e7inde sakl\u0131d\u0131r.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SQL sorgular\u0131n\u0131z yava\u015f m\u0131 \u00e7al\u0131\u015f\u0131yor? Sorgu optimizasyonu ve do\u011fru indeks kullan\u0131m\u0131 ile veri taban\u0131 performans\u0131n\u0131z\u0131 katlay\u0131n. Detayl\u0131 rehber!<\/p>\n","protected":false},"author":2,"featured_media":7022,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[21,29,34],"tags":[115,157,159,160,164,177,178,180],"class_list":["post-7015","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-egitim","category-one-cikan","category-sql","tag-indeks-kullanimi","tag-sorgu-optimizasyonu","tag-sql","tag-sql-hizlandirma","tag-sql-performans","tag-veri-tabani","tag-veri-tabani-optimizasyonu","tag-veritabani-optimizasyonu"],"acf":[],"_links":{"self":[{"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/posts\/7015","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/comments?post=7015"}],"version-history":[{"count":0,"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/posts\/7015\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/media\/7022"}],"wp:attachment":[{"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/media?parent=7015"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/categories?post=7015"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yazilimyap.com\/index.php\/wp-json\/wp\/v2\/tags?post=7015"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}