SEQUENCE & INDEX & SYNONYM

SEQUENCE

  • Otomatik olarak tekil bir numara üretir.
  • Paylaşılabilir bir nesnedir, ortak olarak kullanılabilir.
  • Primary key yerine kullanılabilir.
  • Cache bellek üzerinden hızlı erişilebilir

Create Sequence Syntax:

CREATE SEQUENCE sequence_name
[INCREMENT BY n]
[START WITH m]
[{MAXVALUE k | NOMAXVALUE}]
[{MINVALUE t | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE p | NOCACHE}];

ÖRNEK :

create sequence ornk_seq increment by 1
start with 6 maxvalue 99999
nocache
nocycle;

START WITH: Sekansın hangi numara veya sayı ile başlayacağını ifade eder. Azalan sekanslar için MAXVALUE değeri -1 iken artış gösterecek olan sekanslar için varsayılan MINVALUE değeri 1’dir.

INCREMENT BY: Arka arkaya devamı gelecek ve üretilecek olan numara veya sayıların hangi aralıklarla üretileceğini ifade eder. Eğer azalan sekans yaratmak isterseniz INCREMENT BY değerini negatif olarak ayarlamanız gerekmektedir. Varsayılan INCREMENT BY değeri 1’dir ve özellikle tanımlanmadığı zaman geçerlidir.

MINVALUE: Azalan sekanslar için sınırlayıcı değer olabilir çünkü bir sekansın gidebileceği en az değeri ifade eder. Azalan sekanslar için özellikle bir MINVALUE tanımlanmaz ise sekansın gideceği limitte -10 üzeri 26 olacaktır.

MAXVALUE: Artan sekanslar için sınırlayıcı değer olabilir çünkü bir sekansın gidebileceği en fazla değeri ifade eder. Artan sekanslar için özellike bir MAXVALUE tanımlanmaz ise sekansın gideceği limitte 10 üzeri 27 olacaktır.

CYCLE: Sınırlayıcı eşik değere ulaştıktan sonra sekansın göstereceği davranışı belirler. CYCLE ifadesi ile sekans yaratılmış ise eşik değere ulaşıldıktan sonra sekans, başlangıç noktasına geri döner.

NOCYCLE: Bir sekans yaratırken varsayılan olarak NOCYCLE yaratılır yani sınırlayıcı eşik değere ulaşıldığı zaman sekans tamamlanır.

CACHE: Hafızada tutulması planlanan ve istenen sekans bloklarını ifade eder.  Varsayılan blok sayısı 20’dir.

NOCACHE: Data Dictionary’i sürekli olarak zorlayacak bu özellikle birlikte sekansın numaraların her güncellemede tutulmasını isteyebiliriz. Bunu yaparsak sekansın performansı azalacak ancak oluşturulacak olan sayılar arasında bir kopukluk olmaması garanti altına alınacaktır.

CURRVAL : Sequence’in o andaki değerini gösterir.
select ornk_seq.currval from dual;

NEXTVAL : Sequence’in bir sonraki değerini üreterek, sayacı arttırır. Bu değer, her bir kullanıcı için sıradan verilir.
select ornk_seq.currval from dual;

SEQUENCE İ DEĞİŞTİRME (ALTER SEQUENCE)

Sequence’lerin sadece aşağıdaki değerleri değiştirilebilir:

  • INCREMENT BY
  • MAXVALUE
  • MINVALUE
  • CYCLE
  • CACHE

alter sequence ornk_seq
increment by 2
maxvalue 10000
nocache
nocycle;

INDEX

  • İstenen satırların hızlı getirilmesi amacıyla Oracle tarafından kullanılan nesnelerdir.
  • Disk I/O operasyonlarını azaltır.
  • Oracle tarafından yönetilirler.
  • Bir tablo üzerinde birden fazla index olabilir.
  • İndexler disk üzerinde yer kaplayan nesnelerdir, iyi organize edilmelidir.
  • PRIMARY KEY ve UNIQUE CONSTRAINT tanımlandığında, otomatik olarak index oluşturulur.
  • Kullanıcı isteğine göre bir tablo üzerinde bir veya birden fazla index oluşturulabilir.

Oracle INDEX Çeşitleri

  1. B-Tree Index
  2. Bitmap Index
  3. Function-Based Index
  4. Concatenated Index
  5. Unique Index
  6. Reverse Key Index

1.B-TREE INDEX : Index oluşturulurken herhangi birşey belirtilmez ise B-ree Mantığı ile çalışan index oluşur.

create index INDEX_ADI on INDEX_ATILACAK_TABLONUN_ADI(ilgili Kolon);btree_010mo

2.BITMAP INDEX  : Bir tür ROWID indexlemesidir, B-Tree lere göre çok daha karmaşıktır. Bitmap index yapisi, low cardinality ( low selectivity )  durumunun oldugu kolonlar icin uygundur. Low Cardinality durumu, o kolon icin birbirinden farkli degerlerin az olmasi durumudur (Örneğin cinsiyet kolonu gibi).

Bitmap Index yapısı özellikle birleşik şartlarda verimlilik sağlamaktadır , yani where şartı içerisinde or and birleşimi durumlar.

Bununla birlikte DML( Database Manipulation Languagage) işlemlerinin yoğun olmadığı durumlarda bitmap index uygun olacaktır. Bitmap Index yapısını sürekli güncellemek yavaşlığa neden olacaktır.

create bitmap index INDEX_ADI on INDEX_ATILACAK_TABLONUN_ADI(ilgili Kolon);

NOT : Bitmap indeksleme çok fazla sayıda satıra sahip tablolardaki düşük çeşitlilik (cardinality) sahibi sütunlar üzerinde yapılmalıdır. Unutmamanız gereken bir başka konu ise bitmap indeksleme sizin için gerçek bir şeytana dönüşebilir! Bitmap indekslemenin olduğu tablo çok fazla güncelleniyor ve sürekli DML operasyonuna maruz kalıyorsa eğer bir daha düşünün çünkü bir bitmap indeksi güncellemenin maliyeti oldukça yüksektir ve kimi zaman yığın bir yüklemeden önce kullanılamaz hale getirilir ve yükleme bittikten sonra yeniden oluşturulurlar. Bunun sebebi ise bitmap indekslerin sahip olduğu bit’lerin sıkıştırılmış bir formatta bulundurulması. Yani bitmap indeks aslında bir sıkıştırılmış indekstir ve doğal olarak yerden de tasarruf edebilirsiniz.

Bitmap indekslerin diğer indekslerden farklı olduğu bir başka durum ise NULL değer yani değersiz değeri indeksleyebilmeleridir. Bu durum bir takım sorguların müthiş hızlı çalışmasını sağlayabilir.

3.FUNCTION-BASED INDEX: Bu index türünde indexin oluşturulduğu kolon, sorgu çekilirken Karakter yada Matematiksel fonksiyon kullanması gerekiyorsa, bu durumda index oluşturulurken fonksiyon tabanlı oluşturmamız gerekir. Bu tip indexlere Fonksiyon bazlı indexler denir. Sorgularınızın Where koşulunda fonksiyon kullandığınızda eğer indexi bu fonksiyon ile oluşturmamışsanız indexi kullanmayacaktır. Bu durumda indexi fonksiyon tabanlı oluşturmanız gerekmektedir.

ÖRNEK: CREATE index abn_ad_idx  on  ABONE_TBL(ABN_ADI);

böyle bir indexte aşağıdaki gibi bir sorgu indexi kullanmayacaktır

SELECT * from ABONE_TBL where lower(ABN_ADI)=’faruk’

Bu durumda indexi aşağıdaki gibi fonksiyon tabanlı oluşturmamız gerekir.

CREATE index abn_ad_idx on ABONE_TBL(lower(ABN_ADI));

4.CONCATENED INDEX : Bir index e birden fazla kolon konması ile yapılan indexlemedir. aslında B-Tree index tir.

CREATE index abn_ad_soyad_idx  on  ABONE_TBL(ABN_ADI, ABN_SOYADI);

aşağıdaki sorgu bu indexi kullanacaktır.

select * from ABONE_TBL where abn_adi=’FARUK’ and abn_soyadi=’ÇEVİK’

5.UNIQE INDEX : Normalde B-Tree index yapısı Non-Unique dir.  Bu index türünde oluştururken Unique keyword unu kullandığımız zaman Oracle bize Unique index oluşturacaktır. Bu index türü özellikle benzersiz kayıt içeren kolonlarda kullanılır. Aşağıdaki gibi oluşturulur.

CREATE unique index abn_tc_idx on ABONE_TBL(ABN_TC);

6.REVERSE KEY INDEX : Bu index türünde index anahtarının değeri her zaman için ters çevrilir.

CREATE index abn_tel_idx on ABONE_TBL(ABN_TEL) reverse;

SYNONYM

  • Synonym’ler veritabanı nesnelerine verilen takma adlardır.
  • Kısaltılmış isimlerin kullanılmasını sağlarlar.
  • Başka kullanıcıların o nesneye kolay ulaşmasını sağlarlar.
  • Veritabanı güvenliğine katkıları vardır.
  • PUBLIC ifadesi ile oluşturulan synonym herkes tarafından görülebilir.

syntax :

CREATE [public] SYNONYM takma_isim FOR object;

ÖRNEK : HR.employees tablosunun takma adını prsnl yapalım

create synonym prsnl for hr.employees;

sysnonm

 select * from prsnl;

sysnonym