Veritabanında yaratılacak tablolarda tutulacak verilere hızlı erişerek işlem yapılması esastır. Veri girişi, veri güncelleme, silme veya raporlama amaçları için tablolardaki alanlar kullanılarak erişimler yapılmaktadır. Bu erişimlerin hızlı olabilmesi için de alanların istenilen şekilde sıralı olmalıdır.
Indexlerin yaratılması sırasında iyi bir analiz yapılmalıdır. Bir tabloya yapılacak her kayıt ekleme, güncelleme, silme (INSERT, UPDATE, DELETE) işlemlerinde index tablolarının da güncelleneceği unutulmamalıdır. Bu da sistem performansını genel olarak düşürücü bir faktördür. Özellikle veriye erişim yöntemlerinin, raporlamalarda kullanılacak sorgu çeşitlerinin belirlenmesi ve hepsini kapsayacak index tabloların yaratılması önerilir. Ayrı ayrı alanlar için index yaratılacağına bu alanların birlikte kullanılacağı index tabloların yaratılmasına çalışılmalıdır. Ayrıca çalışmakta olan bir veritabanında, içinde yüklü sayıda veri olan tablolara sonradan indexlerin yaratılması sistem performansını etkileyeceği unutulmamalıdır. Ayrıca benzer alanlardan oluşan indexler varsa sorgulamalar sırasında veritabanının hangi indexi kullanacağının belirlenmesi tavsiye edilir.
Veritabanı sisteminde dahan önce gördüğümüz CREATE TABLE komutu sırasında kullandığımız PRIMARY KEY ve UNIQUE değerleri için otomatik olarak INDEX tablolar yaratılır. Böylece veriye erişmede kolaylık, hızlılık sağlanmış olacaktır.
Kullanılacak tüm SELECT ifadelerindeki WHERE kısmında yazılacak alanların INDEX tablolarında kullanılan alanlardan seçilmesi gerekir. Aynı zamanda WHERE kısmının fazla karışık olmaması tavsiye edilir. Böylece sistemin hangi index tablosunu kullanacağının belirlenmesinde zorluk yaşanmamış olur. WHERE kısmında kullanılacak alanların INDEX tablolarındaki sıraya göre yazılmaz ise INDEX kullanılmamış olacaktır. INDEX hangi sıradaki alanlar ile yaratılmışsa WHERE kısmında da o sırada kullanılması gerekmektedir.
ORACLE veritabanı, INDEX yönteminde B*-TREE denilen yöntemi kullanmaktadır. Bu yöntemde indexlenen alanlar bir ağaç yapısı şeklinde disk üzerinde tutulurlar. Indexli bir alana erişmek istenildiğinde aşağıdan yukarıya doğru bir yöntemle uygun ve istenilen verilere ulaşılmış olacaktır. INDEX tablolarında sıralanmış alanları belirleyen aıraç ROWID denilen özelliktir. ROWID her bir alanın kaçıncı kayıt olduğunu gösteren bir sistemdir. UNIQUE olan alanların INDEX değerlerinde tek bir ROWID vardır. NONUNIQUE indexlerde ise önce alanın değeri daha sonra ROWID vardır.
Sorgulamaların çalıştırılmadan önce EXPLAIN denilen yöntemle analiz edilerek doğru indexlerin kullanıp kullanmadığı araştırılmalıdır. Genel kural olarak bir sorgulama sonucunda tablonun toplam kayıt sayısının %10 ila %15’i kadar kayıt getirilecekse index yaratılması uygundur. Eğer bir sorgulama bu oranlardan daha fazla sayıda kayıt getirecekse index kullanılmasının bir yararı olmadığı gibi sistem performansını olumsuz etkileyecektir.
INDEX kullanılmadan bir tabloya erişim yapılmak istenirse, veritabanı sistemi, bu tablonun disk üzerindeki dağıtık şekilde bulunan parçacıklarına erişerek tümü bazında arama yapacaktır. Bu şekilde bir arama TABLE SCAN veya FULL TABLE SCAN olarak adlandırılır. Bu şekildeki arama, disk kafasının sürekli hareketi, sürekli bir şekilde okuma ve kontrol etme, böylece işlemci üzerindeki yükü arttıracaktır. Bütün bunlarda sistemin performansını olumsuz etkileyecektir. Veriye hızlı erişmenin tek yolu doğru bir şekilde INDEX’lenmiş tabloları doğru WHERE ifadelerini SELECT cümlecikleri içinde kullanmaktır.
CREATE [UNIQUE] INDEX
ON {
[INITRANS
[MAXTRANS sayi]
[TABLESPACE
[PCTFREE
[NOSORT]
[RECOVERABLE | UNRECOVERABLE ]
Ø UNIQUE : İndekslenecek alanın tekil olacağını belirten bölümümdür.
Ø İndex ismi : Oluşturulacak indekse verilecek isimdir.
Ø Tablo ismi : İndeksin tanımlanacağı tablo ismidir.
Ø Sütun ismi : İndeksin oluşturulacağı sütunlardır.
Ø ASC : İndeksin artan olacağını belirten bölümdür.
Ø DESC : İndeksin azalan olacağını belirten böümdür.
Ø INITRANS : İndeks üzerinde aynı anda ilk olarak kaç tane işlem yapılacağının belirtildiği bölümdür.
Ø MAXTRANS : İndeks üzerinde aynı anda en fazla kaç işlem yapılacağının belirtildiği bölümdür.
Ø TABLESPACE : İndeksin hangi tablespace üzerinde oluşturulacağının belirtildiği bölümdür.
Ø PCTFREE : Sonradan yapılacak ekleme ve değiştirmeler için boş olarak ayrılacak yerin bloğa göre yüzdesinin belirtildiği kısımdır.
Ø NOSORT : Kayıtlar veritabanında sıralı olarak yer alıyorsa, indeks kayıtlarının tekrar sıralanmaması için kullanılan ifadedir.
Ø RECOVERABLE: İndeks için yapılan işlemlerin geri alma ihtimaline kaydedilmesini belirten bölümdür.
UNRECOVERABLE: İndeks için yapılan işlemlerde geri alma işlemi olmayacağının belirtildiği bölümdür.