Site icon IT Tutorial

Oracle Veritabanında Index Kavramı ve Kullanımı -1

Bu yazımda Oracle Veritabanında Index Kavramı ve Kullanımı ne olduğunu ve nasıl kullanıldığını anlatacağım. Index kavramı özellikle Oracle Veritabanlarının Performance tuning çalışmaları konusunda çokça karşımıza çıkar.

 

Oracle Index Kullanımı

 

Veritabanlarının vazgeçilmez ve doğru yönetilmesi çok zaruri olan önemli objelerinden birisidir. Bu yüzden index konusunu ayrıntılı bir şekilde öğrenmemiz gerekmektedir. Bu bağlamda ben bu ve bundan sonraki yazımda Index konusunda detaylı bilgileri örnekleriyle ele alacağım. Şimdi Index konusu için index nedir ve neden kullanılır sorusuna cevap vererek yazımıza başlayalım.

 

Oracle Index Kullanımı

Veritabanı teknolojilerinde ( Oracle, SQL Server, Sybase, DB2, MySQL,PostreSQL vb.. ) verilerimizin tutulduğu tablolardaki verilere daha hızlı erişebilmek için oluşturduğumuz nesnelere Index denir. Index i anlamak için bir kaç canlı örnek üzerinden bahsedersek konu daha kalıcı olacaktır. Ör: Elinizde 100.000 farklı kelime içeren İngilizce-Türkçe sözlüğünün olduğunu düşünün ve siz sürekli olarak bilmediğiniz ingilizce kelimeleri sözlükten bulup türkçe karşılıklarına bakmaktasınız.

 

Eğer bu İngilizce Türkçe sözlüğünüz Kelimelerin baş harf(ler)ine göre sıralanmasaydı ne olurdu ? Siz mesela Computer kelimesini bulmak için neredeyse Tüm sözlüğü baştan aşağı taramanız gerekecekti. Buda haliyle hem çok zaman alacaktır hemde sizi gereksiz yere yoracaktır. Ancak eğer sözlüğünüz Kelimelerin baş harf(ler)ine göre sıralanmışsa, ki mantıklı olan yolda budur bu durumda siz Computer kelimesini bulmak için Sözlüğün içindekiler kısmından C harfinin başladığı sayfaya direk gider ve aramanızı burada gerçekleştirirsiniz. İşte buradaki Sözlüğün içindekiler kısmı ve kelimelerin baş harfine göre sıralanması mantığı ile Veritabanlarında kullanılan Index mantığı aynı şeydir.

Aynı örneği üniversitelerin 2-3 katlı kütüphaneleri içinde düşünebilirsiniz. Kütüphanelerde raflar eğer kitapların Adlarına göre yada Yazarlarına göre sıralanmasaydı aradığınız bir kitap için tüm kütüphaneyi altüst etmeniz gerekecekti. İşte Kitapların adlarına göre sıralanması mantığı ile yine bizim Veritabanlarında Tablolar için oluşturmuş olduğumuz indexler aynı mantığa sahiptirler. Oracle veritabanında tablolar için index oluşturulduğu zaman Oracle fiziksel olarak bu tablonun kayıtlarını belli bir mantığa göre sıralı bir şekilde depolayıp bu kayıtların aynı zamanda ROWID bilgisini tutarlar. Burdaki Rowid bilgisini kitabın içindekiler kısmındaki bir konuya denk gelen sayfa numarası olarak düşünebilirsiniz.

 

 

Oracle veritabanında bir tablodan veri sorgulandığı zaman Oracle ilk olarak o tabloya ait index varmı yokmu bunu kontrol eder. Eğer index var ise ve istenilen kayıt sayısı tablonun ortalama %15 ine eşit veya daha az ise Oracle istenen verileri Index üzerinden bulup dönderir. Bu tip bir veri sorgulama normalden daha kısa sürede ve daha az maliyetli olarak gerçekleşir ve buna Index Scan denir. Eğer index yoksa yada index varken istenen kayıt sayısı tablonun tamamının %15 inden fazla ise Oracle bu durumda indexten gitmenin daha maliyetli olduğunu düşünüp Full Table scan dediğimiz tablonun tamamını tarar. Full table scan yada Index scan olup olmamasını Query Optimizer karar verir.

 

Yukarda belirttiğim %15 oranıda yine bazen değişiklik gösterse de Oracle ın genel itibariyle bu konuda sunduğu threshold değeri %15 tir. Bu %15 değeri büyük tablolar için geçerli olsada denediğim küçük tablolarda %40 lara kadar varabiliyor. Ancak dediğim gibi  genel itibariyle Oracle diyorki eğer sorguladığınız veri, tablonuzun %15 ine eşit yada küçükse tablonuzda index varsa veriyi  çok hızlı bir şekilde ve daha az maliyetle size sunmak için ben indexi kullanırım diyor. Böylece istenen verileri bulmak için index kullanıldığında I/O miktarı düştüğü için hem hızlı bir şekilde veriler bulunur hemde sistem kaynakları çok tüketilmez.  Tablolarımızda Index kullanmanın avantajları olduğu gibi dezavantajları da vardır. Index kullanmanın  dezavantajları aşağıdaki gibidir.

 

Dezavantajları

 

Genel itibariyle şöyle bir durum ortaya çıkarabiliriz. Veritabanlarında çok fazla sorgu (Select) yapılan tablolarda (Genellikle Rapor çekilen OLAP sistemlerindeki tablolar ) Index kullanmak performans açısından çok faydalı olduğu gibi sistem kaynaklarınıda yormaması yönüyle de bizim için vazgeçilmez bir nimetdir. Veritabanlarında çok fazla DML( Data Manipulation Language – Insert,Update,Delete) işlemleri yapılan tablolarda (Genellikle OLTP sistemlerde görülen tablolar ) Index kullanmak maliyetli ve performans sorunlarına yol açacaktır o yüzden gerekmedikçe böyle tablolarda kullanılmamalıdır.

 

Oracle Index Çeşitleri

Oracle Veritabanında genel olarak sıklıkla kullanılan 2 tip index türü vardır bunlar aşağıdaki gibidir.

  1. B-Tree Index ( Balanced Tree Index )
  2. Bitmap Index

 

 

1- B-Tree Index ( Balanced Tree Index ): Bu index türü en çok kullanılan ve Oracle da default olarak gelen Index türüdür. B-Tree Indexin Karakterlerden oluşan bir kayıt kümesi için oluşan yapısı aşağıdaki gibidir.

B-Tree Index te Oracle veriye erişirken en dıştaki Root blokla başlar. Burada uygun olan Branch e gider ordanda son olarak ilgili leaf e gider ve bu leaf te bulunan ROWID bilgisini okur. Oracle son olarak ROWID bilgisi ile istenen bloğu okuyup kullanıcıya sunar. Örneğin Yukardaki Ağaçta Luis ismi indexten aranırken ilk olarak ROOT sonra İlgili BRANCH ve son olarak doğru olan LEAF e gidip doğru olan kaydı bulup döner.

Aynı şekilde B-Tree Indexin Sayılardan oluşan bir örnek  kayıt kümesi için oluşan yapısı aşağıdaki gibidir.

Bu index türü aşağıdaki gibi oluşturulabilir.

SQL> create index INDEX_ADI on INDEX_ATILACAK_TABLONUN_ADI(ilgili Kolon);
SQL> create index MID_IX on musteri(musteri_id);
SQL> create index FID_IX on fatura(fatura_id);

2. Bitmap Index: Bu index türü B-Tree den sonra en çok kullanılan index türüdür. Bu index türü belli başlı değerlerin sürekli olarak tekrar etmesi durumunda kullanılır. Mesela Cinsiyet Kolonu için sadece 2 değer vardır Erkek ve Bayan olmak üzere bu değer her kullanıcı için sürekli olarak tekrar eder yada Evet Hayır cevabı gibi sınırlı sayıda değer girilebilecek kolonlar bunlara bir örnektir. Bitmap dediğimiz şey bit haritasıdır ve 0 – 1 lerden oluşmaktadır. Bitmap index her bir kaydın ROWID bilgisini ve Bitmap değerini tutar. Bitmap index in yapısını gösteren bir örnek kayıt kümesi aşağıdaki gibidir.

Bitmap index i aşağıdaki gibi oluşturabilirsiniz.

SQL> create bitmap index INDEX_ADI on INDEX_ATILACAK_TABLONUN_ADI(ilgili Kolon(lar));
SQL> create bitmap index CIN_IX on musteri(cinsiyet);

 

Bu indexlerin dışında da benzer mantıkla oluşturulan indexler vardır bunlar aşağıdaki gibidir.

SQL> Create index MAD_IX on musteri(ad);

Yukardaki gibi bir index oluşturulduğunda aşağıdaki sorgu indexi kullanmayacaktır.

SQL> select * from musteri where lower(ad)='mehmet';

Bu durumda indexi aşağıdaki gibi fonksiyon tabanlı oluşturmanız gerekmektedir.

SQL>  Create index MAD_IX on musteri(lower(ad));

Indexi yukardaki gibi fonksiyon tabanlı oluşturduğunuz zaman where koşuluna konan lower fonksiyonuna rağmen sorgu indexi kullanacaktır.

SQL> Create index MAD_IX on musteri(ad,soyad);

Yukardaki gibi bir index oluşturulduğunda aşağıdaki sorgu indexi kullanabilecektir.

SQL> select * from musteri where ad='mehmet' and soyad='deveci';

 

SQL> Create unique index MTC_IX on musteri(TC_No);

SQL> create Index MID_IX on musteri(musteri_id) reverse;

Indexler hakkında genel bilgiler verdikten sonra bu yazımın sonuna gelmiş bulunmaktayım. Bir sonraki yazıda Görüşmek dileğiyle Esen Kalın…

 

 

Do you want to learn Oracle Database Performance Tuning detailed, then Click this link.

 

 

 

Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi İhtiyacınız var mehmet.deveci@sysdbasoft.com adresine mail atarak Bizimle iletişime geçebilirsiniz.

– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri

Exit mobile version