Oracle indexleri

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Oracle indexleri

sami çelik
Merhaba Erman bey,

İndexler üzerine çalışma yapıyorum fakat aşağıdaki indexlerin farklarını anlayamadım. Rica etsem yardımcı olabilir misiniz.

index unique scan
index range scan
index full scan
index fast full scan
index skip scan

iyi çalışmalar.
Reply | Threaded
Open this post in threaded view
|

Re: Oracle indexleri

ErmanArslansOracleBlog
Administrator
ilgili kolonda unique veya primary key constraint varsa -> unique scan. Bu hızlı dır. Tek row döndürür, istenen row u bulduğunda direk çıkar, tüm indexi gezmez.

Range Scan, İndex in içinde belli bir alan için yapılan access yöntemi Sınırlı veya sınırsız olabilir.

Index Full scan 'de tüm index elemanlarına sıralı şekilde tek tek bakar. Tek tek index entrylerinin üzerinden geçer.

Index Fast Full scan de ise sanki Full Table scan yapar gibi tüm indexi tarar. Yani birden fazla block u aynı okur. Bunun döndürdüğü sonuçlar sorted değildir.

Bunlar tabii genel tanımlar, kullanım sırasında daha iyi anlaşılır. Hangi durumlarda hangi index access methodunun tercih edileceği, hangi durumlar gerçekleşirse veya hangi mimari dizayna sahipseniz, hangi query de hangi index access methodunun kullanılacağı değişiklik gösterecektir.

Örneğin indexiniz unique değilse unique scan bekleyemezsiniz. Yada indexiniz varsa ama unique değilse ve siz indexli kolonlardan leading olanını where conditionında kullanırsa, oracle 'ın range scan yapmasını beklersiniz. Çünkü A leading se, Oracle conditiona göre A üzerinde ilgili range 'ten işi halleder. Bunu yapamayacağı bir condition verilirse ve yine de ilgili conditionı kolonu indexte varasa, conditiona göre örneğin index full scan de yapıyor olabilir.
Reply | Threaded
Open this post in threaded view
|

Re: Oracle indexleri

sami çelik
Merhaba,

Değerli yorumlarınız için teşekkür ederim.
 Son bir sorum daha var örneğin biz db deki tablolarda index oluşturuyoruz format : CREATE INDEX index  ON b(c) şeklinde, burada biz index range scan, index full scan olarak oluşturmuyoruz execution planda ise index full scan olarak tabloya erişim sağlıyor bu da performans açısında sanırım sıkıntılı durum.

Bu konuda nasıl yönledirme yapabilirsiniz.

Teşekkürler Erman bey.
Reply | Threaded
Open this post in threaded view
|

Re: Oracle indexleri

ErmanArslansOracleBlog
Administrator
range scan, index full scan vs , bunlar access methodu. Index tipi değiller.
Ama unique index bir index tipidir.
Unique indexli kolonu where conditiona yazdığınızda, ilgili basit query için execution planda index unique scan görürsün.
Burda da index unique scan  , indexe access methodudur. Yani, "tabloda unique bir index var, where conditionda da ilgili kolon verilmiş, o halde ben bu indexe unique scan yapayım" diyor aslında Oracle.

Index tipleri ve index yaratımı için aşağıdaki dökümana bakmanızı tavsiye ederim.

https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5010.htm

Bu dökümandaki anlatımlar gayet iyi ayrıca syntax ı da gösteriyor.
Reply | Threaded
Open this post in threaded view
|

Re: Oracle indexleri

sami çelik
Çok teşkkür ederim.
Elinize sağlık..