{"id":190,"title":"SQL Notlar\u0131: Performans \u0130pu\u00e7lar\u0131 ve Optimizasyon","content":"<p>MySQL, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde \u00e7al\u0131\u015f\u0131rken performans\u0131 art\u0131rmak i\u00e7in \u00e7e\u015fitli optimizasyon teknikleri sunar. Bu yaz\u0131da, **bile\u015fik indeksler**, **sorgu optimizasyonu** ve **depolama d\u00fczeni** ile ilgili temel bilgileri ve kullan\u0131m \u00f6rneklerini ele alaca\u011f\u0131z.<\/p><p>---<\/p><p>### Bile\u015fik \u0130ndeks Olu\u015fturma<\/p><p>Bile\u015fik indeksler, birden fazla s\u00fctun \u00fczerinde tan\u0131mlan\u0131r ve belirli sorgular\u0131n performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. \u0130deal bir bile\u015fik indeks olu\u015fturmak i\u00e7in s\u00fctunlar\u0131 a\u015fa\u011f\u0131daki s\u0131rayla ekleyin:<\/p><p>1. **WHERE Ko\u015fulundaki S\u00fctunlar:** \u00d6rne\u011fin, `WHERE a = 12 AND b = 'xyz'` i\u00e7in `INDEX(a, b)`.<br>2. **IN Ko\u015fulundaki S\u00fctunlar:** Optimizat\u00f6r, indeks \u00fczerinde h\u0131zl\u0131 atlamalar yapabilir.<br>3. **Aral\u0131k Ko\u015fullar\u0131:** \u00d6rne\u011fin, `x BETWEEN 3 AND 9` veya `name LIKE 'J%'`. \u0130ndeks, ilk aral\u0131k s\u00fctunundan sonras\u0131n\u0131 kullanmaz.<br>4. **GROUP BY S\u00fctunlar\u0131:** Gruplama s\u00fctunlar\u0131n\u0131 s\u0131rayla ekleyin.<br>5. **ORDER BY S\u00fctunlar\u0131:** S\u0131ralama s\u00fctunlar\u0131n\u0131 s\u0131rayla ekleyin. T\u00fcm s\u00fctunlar `ASC` veya `DESC` olmal\u0131d\u0131r.<\/p><p>#### \u00d6rnek:<br>```sql<br>CREATE INDEX idx_composite ON my_table (a, b, c);<br>```<\/p><p>Bu indeks, a\u015fa\u011f\u0131daki sorgular i\u00e7in kullan\u0131labilir:<br>```sql<br>SELECT * FROM my_table WHERE a = 12 AND b = 'xyz';<br>SELECT * FROM my_table WHERE a = 12 ORDER BY c;<br>```<\/p><p>---<\/p><p>### Sorgu Optimizasyonu<\/p><p>#### 1. **Fonksiyonlar \u0130\u00e7inde \u0130ndeksli S\u00fctunlar\u0131 Kullanmaktan Ka\u00e7\u0131n\u0131n**<br>Fonksiyonlar i\u00e7inde indeksli s\u00fctunlar\u0131 kullanmak, indeksin kullan\u0131lmas\u0131n\u0131 engeller. \u00d6rne\u011fin:<br>```sql<br>WHERE DATE(dt) = '2000-01-01' &nbsp;-- \u0130ndeks kullan\u0131lmaz<br>```<br>Bunun yerine:<br>```sql<br>WHERE dt &gt;= '2000-01-01' AND dt &lt; '2000-01-02' &nbsp;-- \u0130ndeks kullan\u0131l\u0131r<br>```<\/p><p>#### 2. **OR Ko\u015fullar\u0131**<br>`OR` ko\u015fullar\u0131, optimizasyonu zorla\u015ft\u0131r\u0131r. \u00d6rne\u011fin:<br>```sql<br>WHERE a = 12 OR b = 78 &nbsp;-- \u0130ndeks kullan\u0131m\u0131 zor<br>```<br>Bunun yerine:<br>```sql<br>WHERE a IN (12, 78) &nbsp;-- \u0130ndeks kullan\u0131labilir<br>```<\/p><p>#### 3. **Alt Sorgular**<br>Alt sorgular, \u00f6zellikle ili\u015fkili (correlated) alt sorgular, performans\u0131 etkileyebilir. \u00d6rne\u011fin:<br>```sql<br>SELECT a, b, (SELECT MAX(x) FROM t WHERE t.x = u.x) AS c FROM u;<br>```<br>Bu t\u00fcr sorgular, `LEFT JOIN` ile de\u011fi\u015ftirilebilir ve daha h\u0131zl\u0131 \u00e7al\u0131\u015fabilir.<\/p><p>---<\/p><p>### Depolama D\u00fczeni Optimizasyonu<\/p><p>#### 1. **Uzun PRIMARY KEY'lerden Ka\u00e7\u0131n\u0131n**<br>Uzun bir PRIMARY KEY, disk alan\u0131n\u0131 bo\u015fa harcar ve ikincil indekslerde de yer kaplar. Bunun yerine `AUTO_INCREMENT` kullan\u0131n.<\/p><p>#### 2. **VARCHAR Kullan\u0131m\u0131**<br>De\u011fi\u015fken uzunluklu metinler i\u00e7in `VARCHAR` kullan\u0131n. `CHAR(N)` her zaman `N` karakter yer kaplar, oysa `VARCHAR` sadece gerekti\u011fi kadar yer kullan\u0131r.<\/p><p>#### 3. **COMPRESSED Sat\u0131r Format\u0131**<br>B\u00fcy\u00fck tablolar veya tekrarlanan veriler i\u00e7in `COMPRESSED` sat\u0131r format\u0131n\u0131 kullan\u0131n. Bu, disk I\/O'yu azalt\u0131r ve performans\u0131 art\u0131r\u0131r.<\/p><p>#### 4. **OPTIMIZE TABLE**<br>Tablo boyutu stabilize oldu\u011funda veya b\u00fcy\u00fck miktarda veri eklendi\u011finde `OPTIMIZE TABLE` kullanarak tabloyu yeniden d\u00fczenleyebilir ve bo\u015f alan\u0131 s\u0131k\u0131\u015ft\u0131rabilirsiniz. Ancak bu i\u015flem maliyetlidir ve nadiren kullan\u0131lmal\u0131d\u0131r.<\/p><p>---<\/p><p>### Performans\u0131 Art\u0131rmak \u0130\u00e7in Di\u011fer \u0130pu\u00e7lar\u0131<\/p><p>- **innodb_buffer_pool_size:** Bu de\u011fer, mevcut RAM'in yakla\u015f\u0131k %70'i olarak ayarlanmal\u0131d\u0131r.<br>- **Prefix \u0130ndeksler:** \u00d6rne\u011fin, `INDEX(foo(20))` gibi \u00f6nek indeksler genellikle faydas\u0131zd\u0131r ve performans\u0131 d\u00fc\u015f\u00fcrebilir.<br>- **PARTITIONing:** PARTITIONing nadiren performans avantaj\u0131 sa\u011flar ve bazen performans\u0131 d\u00fc\u015f\u00fcrebilir.<\/p><p>---<\/p><p>### Rezerve Kelimeler ve Hatalar<\/p><p>MySQL'de baz\u0131 \u00f6zel kelimeler (\u00f6rne\u011fin, `ORDER`, `GROUP`) rezerve edilmi\u015ftir. Bu kelimeleri tablo veya s\u00fctun ad\u0131 olarak kullan\u0131rken backtick (`) ile \u00e7evrelemeniz gerekir:<\/p><p>```sql<br>SELECT * FROM `order`; &nbsp;-- Rezerve kelime kullan\u0131m\u0131<br>```<\/p><p>---<\/p><p>### Sonu\u00e7<\/p><p>MySQL'de performans\u0131 art\u0131rmak i\u00e7in do\u011fru indeksleme, sorgu optimizasyonu ve depolama d\u00fczeni stratejileri kullan\u0131lmal\u0131d\u0131r. Bile\u015fik indeksler, sorgular\u0131n h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirken, `OR` ko\u015fullar\u0131 ve fonksiyonlar i\u00e7inde indeksli s\u00fctunlar kullanmaktan ka\u00e7\u0131nmak da performans\u0131 korur. Ayr\u0131ca, depolama d\u00fczeni optimizasyonu ve do\u011fru yap\u0131land\u0131rma ayarlar\u0131, veritaban\u0131n\u0131n genel performans\u0131n\u0131 art\u0131rabilir.<\/p>","excerpt":"MySQL'de performans\u0131 art\u0131rmak i\u00e7in do\u011fru indeksleme, sorgu optimizasyonu ve depolama d\u00fczeni stratejileri kullan\u0131lmal\u0131d\u0131r. Bile\u015fik indeksler, sorgular\u0131n h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirken, `OR` ko\u015fullar\u0131 ve fonksiyonlar i\u00e7inde indeksli s\u00fctunlar kullanmaktan ka\u00e7\u0131nmak da performans\u0131 korur. Ayr\u0131ca, depolama d\u00fczeni optimizasyonu ve do\u011fru yap\u0131land\u0131rma ayarlar\u0131, veritaban\u0131n\u0131n genel performans\u0131n\u0131 art\u0131rabilir.","created_at":"2025-01-13 16:01:04","updated_at":"2026-09-07 14:35:10","category_id":9,"view_count":659,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 16:01:04","featured_image":"resimyok.jpg","slug":"sql-notlari-performans-ipuclari-ve-optimizasyon","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"}