Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  Aranan bilginin nerede olduğunun anahtar değerinden yararlanılarak bulunabilmesini sağlar. Mantıksal ve fiziksel olarak veriden bağımsızdır. Bir index, diğer indexleri ya da çizelgeleri etkilemeksizin yok edilebilir ya da yaratılabilir.
jessender
20 Temmuz 2005 21:12
2.  Index, veritabanı nesnelerinden biridir.Bir tablo içinde bulunan verilere daha hızlı ulaşmak için kullanılmaktadırlar.Veritabanı tune işlemleri için bakılacak yerlerden biri de tablolar üzerinde index olma durumudur.Genellikle aramalar en çok hangi sutun üzerinde gerçekleşiyorsa, o alana index konur.Bu sayede daha performanslı sonuçlar elde edilir.

Indexler sadece select sorgularında kendilerini gösterir.Bir tabloda index varsa, veritabanı yönetim sistemi tabloyu full scan etmek yerine, index üzerinden tabloyu dolaşır.Bu sayede daha hızlı sonuca ulaşılmış olunur.

insert sorguları için, indexin bir ek maliyeti vardır.Çünkü her yeni bir insert, indexin yeniden organize edilmesine neden olmaktadır.Bu da haliyle işlemin yavaş sonuçlanmasına neden olmaktadır.
Yapılan testlerde-bu testler bizzat yapılmıştır-, indexli bir tablodan yapılan select işlemi, indexsiz tabloya göre yaklaşık 40 kat daha hızlı gerçekleşmektedir.Ama aynı şekilde indexli bir tablodan yapılan insert işlemi, indexsiz bir tabloya göre yaklaşık 5 kat daha yavaş gerçekleşmektedir.

Yanlış bir inanış* vardır.Indexler performans arttırır diye.*Bu yanlıştır.OLTP ağırlıklı sistemlerde index dikkatli kullanılmalıdır.Datawarehouse sistemlerinde ise index daha yoğun kullanılmaktadır. Çünkü bu tip sistemler ağırlıkla raporlamaların çıkarıldığı sistemlerdir.
mennan
20 Temmuz 2005 22:53 ~ 21 Temmuz 2005 12:37
3.  Bir tablonun bir alanı için index tanımlamak, o alanın değerlerinin sıralanması demektir ki; bu sayede o alandaki değerlere daha hızlı erişebilirsiniz.

Kelimelerin rastgele sırada yazıldığı bir sözlük düşününüz. Aradığımız kelimeyi bulmak için tek tek bütün kelimeleri okumak zorunda kalırdık! Halbuki kelimelerin sıralı kaydedildiği aklı başında bir sözlükte, aradığımızı bulmak için en fazla 10 sayfa çeviriyoruz.

Örneğin
create table Kisi(
   id int,
   ad varchar(50),
   yas int
)
şeklinde bir tablomuz olsun ve bu tabloya bir milyon kayıt ekleyelim. bu tablo üzerinde çalıştırılan
select * from Kisi where ad='allenscoot'
şeklinde bir sorgu bütün kayıtları tek tek dolaşır. Eğer allenscoot en son kayıtta ise veritabanı bir milyon işlem yapmak zorunda kalacaktır. Eğer ad alanında index varsa, allenscoot kaydı nerede olursa olsun veritabanı onu bulmak için en fazla 20 işlem yapar. (2^20 ~ 1,000,000. bkz: binary search)

Bu durumda ad alanı için index tanımlamak çok mantıklıdır. Peki yas alanı için de index tanımlasak mı? Gerek yok, çünkü sorgumuzun where kısmında ad alanı var, yas yok. Buradan önemli bir sonuca ulaşırız: Indexlere ihtiyaç, runtime'da ortaya çıkar. Programı (yani SQL'leri) yazmadan hangi alanların index'e ihtiyacı olacağını bilemeyiz. Geliştirdiğimiz veritabanı uygulaması için yazdığımız tüm SQL'lerin where kısımlarını incelemeli ve buna göre indexlerimizi belirlemeliyiz. Bu işi yapan toollar da vardır. Örneğin MS SQL Server'ın Index Tuning wizard'ı.

Sadece where değil elbet order by'da belirtilen alanlar için de index tanımlamak sorguları hızlandıracaktır.

"Ne güzel o zaman, ne kadar where, order by varsa hepsini inceleyelim bütün alanlar için index yapalım!"
Bu doğru değildir. Çünkü indexlenmiş bilgi sıralı bilgidir. Sıralanmış kayıtlar select sorgularını hızlandırırken, insert ve update sorgularını yavaşlatır. Çünkü insert edilen bilgi doğru sıraya insert edilmelidir. Bu da şu demektir; yukarıdaki tabloya yeni bir kayıt eklemek için bilgisayarın en az 20 işlem yapması gerekecek. İndex olmasaydı bir seferde insert edebilirdi.

Genellikle 1000'den az satıra sahip tablolara index koymak gereksizdir. Çünkü çoğu veritabanı bu tarz küçük tabloları farklı şekilde yönetir.

Birden fazla alan için tek bir index tanımlamak mümkündür. Bunu (where ad=x and yas=y) veya (order by ad, yas) sorgularında tercih etmek gerekir. Bununla birlikte hiçbir zaman sonuçlarını görmeden index tanımlamaya çalışmamak gerekir. Önce yavaş çalışan SQL tesbit edilmeli, incelendikten sonra indexler tanımlanmalı, SQL tekrar çalıştırılmalı ve performans kazanımı ölçülmelidir. Kazanım yoksa index kaldırılmalıdır. Deneme yanılma en garanti yöntemdir yani.
fizikci
17 Ekim 2006 15:48
4.  Index tanımlamanın bir inceliği hakkında full table scan başlığına bakabilirsiniz.
fizikci
17 Ekim 2006 20:49
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1375 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen