{"id":205,"title":"SQL Notlar\u0131:  \u0130ndeksler ve Tam Metin Arama","content":"<p>MySQL'de indeksler, veritaban\u0131 sorgular\u0131n\u0131n performans\u0131n\u0131 art\u0131rmak i\u00e7in kullan\u0131lan \u00f6nemli ara\u00e7lard\u0131r. Ayr\u0131ca, tam metin arama (FULLTEXT search) \u00f6zelli\u011fi, metin tabanl\u0131 verilerde h\u0131zl\u0131 ve etkili arama yapmay\u0131 sa\u011flar. Bu yaz\u0131da, MySQL'de indeks olu\u015fturma, tam metin arama ve haz\u0131r ifadeler (PREPARE statements) gibi konular\u0131 ele alaca\u011f\u0131z.<\/p><p>#### 1. \u0130ndeks Olu\u015fturma<\/p><p>\u0130ndeksler, tablolardaki belirli s\u00fctunlar \u00fczerinde olu\u015fturulur ve sorgular\u0131n daha h\u0131zl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p><p>##### \u00d6rnek 1: Basit \u0130ndeks Olu\u015fturma<\/p><p>A\u015fa\u011f\u0131daki \u00f6rnekte, `my_table` tablosundaki `name` s\u00fctunu i\u00e7in bir indeks olu\u015fturuluyor:<\/p><p>```sql<br>CREATE INDEX idx_name ON my_table(name);<br>```<\/p><p>##### \u00d6rnek 2: Benzersiz \u0130ndeks Olu\u015fturma<\/p><p>Benzersiz indeks, bir s\u00fctuna yinelenen veri girilmesini engeller:<\/p><p>```sql<br>CREATE UNIQUE INDEX idx_name ON my_table(name);<br>```<\/p><p>##### \u00d6rnek 3: Bile\u015fik \u0130ndeks Olu\u015fturma<\/p><p>Bile\u015fik indeks, birden fazla s\u00fctun \u00fczerinde olu\u015fturulur ve bu s\u00fctunlar\u0131n birlikte kullan\u0131ld\u0131\u011f\u0131 sorgular\u0131 h\u0131zland\u0131r\u0131r:<\/p><p>```sql<br>CREATE INDEX idx_name_date ON my_table(name, date);<br>```<\/p><p>**Not:** Bile\u015fik indekslerde s\u00fctun s\u0131ras\u0131 \u00f6nemlidir. Sorgular, indeksin solundaki s\u00fctunlar\u0131 kullanmal\u0131d\u0131r.<\/p><p>#### 2. AUTO_INCREMENT Anahtar\u0131<\/p><p>`AUTO_INCREMENT`, bir s\u00fctuna otomatik olarak artan de\u011ferler atamak i\u00e7in kullan\u0131l\u0131r. Genellikle birincil anahtar (PRIMARY KEY) olarak kullan\u0131l\u0131r.<\/p><p>##### \u00d6rnek: AUTO_INCREMENT ile Tablo Olu\u015fturma<\/p><p>```sql<br>CREATE TABLE my_table (<br>&nbsp; &nbsp;id INT UNSIGNED NOT NULL AUTO_INCREMENT,<br>&nbsp; &nbsp;name VARCHAR(100),<br>&nbsp; &nbsp;PRIMARY KEY(id)<br>);<br>```<\/p><p>**Not:** `AUTO_INCREMENT` de\u011ferleri her zaman benzersizdir, ancak bo\u015fluklar olabilir veya de\u011ferler yeniden kullan\u0131labilir.<\/p><p>#### 3. Tam Metin Arama (FULLTEXT Search)<\/p><p>Tam metin arama, metin tabanl\u0131 s\u00fctunlarda h\u0131zl\u0131 ve etkili arama yapmay\u0131 sa\u011flar. Bu \u00f6zellik, \u00f6zellikle b\u00fcy\u00fck metinlerde arama yaparken kullan\u0131\u015fl\u0131d\u0131r.<\/p><p>##### \u00d6rnek 1: Basit Tam Metin Arama<\/p><p>A\u015fa\u011f\u0131daki \u00f6rnekte, `book` tablosundaki `Title` s\u00fctununda \"Database Programming\" terimini arar:<\/p><p>```sql<br>ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_index (Title);<\/p><p>SET @searchTerm = 'Database Programming';<br>SELECT MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) AS Score, ISBN, Author, Title<br>FROM book<br>WHERE MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE)<br>ORDER BY Score DESC;<br>```<\/p><p>##### \u00d6rnek 2: Boolean Modunda Tam Metin Arama<\/p><p>Boolean modu, arama terimlerine operat\u00f6rler ekleyerek daha karma\u015f\u0131k aramalar yapmay\u0131 sa\u011flar:<\/p><p>```sql<br>SET @searchTerm = 'Database Programming -Java';<br>SELECT MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE) AS Score, ISBN, Author, Title<br>FROM book<br>WHERE MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE)<br>ORDER BY Score DESC;<br>```<\/p><p>##### \u00d6rnek 3: \u00c7oklu S\u00fctunda Tam Metin Arama<\/p><p>A\u015fa\u011f\u0131daki \u00f6rnekte, `Title` ve `Author` s\u00fctunlar\u0131nda \"Date Database Programming\" terimini arar:<\/p><p>```sql<br>ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_author_index (Title, Author);<\/p><p>SET @searchTerm = 'Date Database Programming';<br>SELECT MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) AS Score, ISBN, Author, Title<br>FROM book<br>WHERE MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE)<br>ORDER BY Score DESC;<br>```<\/p><p>#### 4. Haz\u0131r \u0130fadeler (PREPARE Statements)<\/p><p>Haz\u0131r ifadeler, dinamik SQL sorgular\u0131 olu\u015fturmak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bu \u00f6zellik, \u00f6zellikle sorgular\u0131n \u00e7al\u0131\u015fma zaman\u0131nda olu\u015fturulmas\u0131 gereken durumlarda kullan\u0131\u015fl\u0131d\u0131r.<\/p><p>##### \u00d6rnek: Haz\u0131r \u0130fade ile Sorgu \u00c7al\u0131\u015ft\u0131rma<\/p><p>A\u015fa\u011f\u0131daki \u00f6rnekte, bir haz\u0131r ifade olu\u015fturulur ve \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r:<\/p><p>```sql<br>SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';<br>PREPARE stmt FROM @s;<br>SET @a = 6;<br>SET @b = 8;<br>EXECUTE stmt USING @a, @b;<\/p><p>DEALLOCATE PREPARE stmt;<br>```<\/p><p>**Sonu\u00e7:**<br>```<br>+---+<br>| hypotenuse |<br>+---+<br>| 10 |<br>+---+<br>```<\/p><p>#### Sonu\u00e7<\/p><p>MySQL'de indeksler, tam metin arama ve haz\u0131r ifadeler, veritaban\u0131 sorgular\u0131n\u0131n performans\u0131n\u0131 art\u0131rmak ve karma\u015f\u0131k i\u015flemleri kolayla\u015ft\u0131rmak i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. Bu \u00f6zellikleri etkili bir \u015fekilde kullanarak, veritaban\u0131 uygulamalar\u0131n\u0131z\u0131 daha verimli hale getirebilirsiniz. Bir sonraki yaz\u0131da g\u00f6r\u00fc\u015fmek \u00fczere!<\/p>","excerpt":"MySQL'de indeksler, tam metin arama ve haz\u0131r ifadeler, veritaban\u0131 sorgular\u0131n\u0131n performans\u0131n\u0131 art\u0131rmak ve karma\u015f\u0131k i\u015flemleri kolayla\u015ft\u0131rmak i\u00e7in kullan\u0131lan g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. Bu \u00f6zellikleri etkili bir \u015fekilde kullanarak, veritaban\u0131 uygulamalar\u0131n\u0131z\u0131 daha verimli hale getirebilirsiniz.","created_at":"2025-01-13 15:31:11","updated_at":"2026-09-23 13:08:10","category_id":9,"view_count":555,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 15:31:11","featured_image":"resimyok.jpg","slug":"sql-notlari-indeksler-ve-tam-metin-arama","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim"}