Veritabanı dizini

Bir veritabanı dizini, veri ve dizinin veri yapısını koruyan ve ek depolama alanı maliyetiyle bir veritabanı tablosundaki veri alma işlemlerinin hızını artıran bir veri yapısıdır. İndeksler, bir veritabanı tablosuna yapılan bütün erişimlerde, veritabanı tablosundaki her satırı tek tek aramaya gerek kalmadan hızlı bir şekilde verileri bulmak için kullanılır. İndeksler, hızlı rastgele aramalarda ve sipariş edilen kayıtların verimli  bir biçimde erişimine olanak sağlayan bir veritabanı tablosunun bir veya daha fazla sütunu kullanılarak ve genişletilerek oluşturulabilir.Dizin, bir verinin seçilen sütunlarının bir kopyasını, çok verimli bir şekilde aranabilen, aynı zamanda bir alt düzey disk blok adresi veya kopyalanan verinin tüm satırına doğrudan bağlantı içeren bir kopyadır. Bazı veritabanları, geliştiricilerin işlevler veya ifadeler üzerinde dizinler oluşturmalarına izin vererek dizin oluşturma gücünü genişletir. Örneğin, last_name alanının yalnızca büyük harf sürümlerini dizinde saklanacak üst(last_name) adlı bir dizin oluşturulabilir. Bazen desteklenen başka bir seçenek, parçalı indekslemelerin kullanılmasıdır; buradaki dizin girdileri yalnızca bazı koşullu ifadeleri karşılayan kayıtlar için oluşturulmuştur. Esnekliğin bir diğer yönü, kullanıcı tanımlı işlevlerin yanı sıra sunucu taraflı işlevlerin pek çok çeşidinden oluşan ifadelerin kullanılarak, dizine eklenmesine izin vermektir.Çoğu veritabanı yazılımında, veri setinden yapılacak olan doğrusal bir arama, büyük veritabanlarında verimsizdir, bu nedenle performansı artırmak için doğrusal olmayan arama biçimini sağlayan dizin oluşturma teknolojileri bulunmaktadır.Bir veritabanının N adet veri maddesini içerdiğini ve yalnızca bir verinin seçilmesi gerektiğini varsayalım. Basit bir uygulama, gerekli denetimleri yapmak amacıyla her bir maddeyi tek tek alır ve inceler. Eşleşen tek bir öge varsa, bu tek bir ögeyi bulduğunda durabilir, ancak birden çok eşleşme varsa, her şeyi denetlemelidir.Bu, en kötü durumda operasyonların sayısı O(N) veya doğrusal zaman artımının bütün veri setinin sonuna kadar süreceği anlamına gelir.Veritabanları çok sayıda nesnelerden oluşabilir ve arama sıklıkla yapılan bir işlemdir.Bu durumda genellikle, performansı artırmak arzu edilir.İndeksleme, arama performansını artıran herhangi bir veri yapısıdır. Bu amaçla kullanılan birçok veri yapısı vardır. Arama performansı, dizin boyutu ve dizin güncelleme performansı gibi fenomenleri içeren karmaşık tasarım biçimleri vardır. Çoğu dizin tasarımları logaritmik(O (log (N))) arama performansı sergiler ve bazı uygulamalarda düz (O (1)) gibi bir performansın elde edilmesi de mümkündür.İndeksler, UNIQUE, EXCLUSION, PRIMARY KEY ve FOREIGN KEY gibi veritabanı kısıtlamalarını kullanır.Bir dizin, tabloda eş değersiz bir kısıt oluşturan UNIQUE kullanabilir. Veritabanı sistemleri genellikle gizli biçimde PRIMARY KEY olarak tanımlanan bir dizi sütun gruplarından üst bir dizin oluşturur ve bazıları ise bu kısıtlamayı kontrol etmek için mevcut bir dizini kullanabilir. Çoğu veritabanı sistemi, FOREIGN KEY sınırlamasındaki her başvuru için, başvurulan sütun kümesinin dizine eklenmesini gerektirir, böylece kısıtlamaya katılan tablolarda ekleme, güncelleme ve silme performansını artırır.Bazı veritabanı sistemleri, yeni eklenen veya güncellenen bir kayıt için belirli bir yüklemin başka hiçbir kayıt için tutulmadığını garanti eden bir EXCLUSION kısıtlamasını desteklemektedir. Bu ise; eşsiz bir kısıtlama sağlamak ve örtüşen zaman aralıklarının veya kesişen geometri nesnelerinin tabloda ilaveten depolanmamasını sağlamak gibi daha karmaşık sistemleri uygulamak için kullanılabilir. Böyle bir kısıtlamayı kullanmak için kayıtların hızlı aranmasını destekleyen bir indeksleme yöntemi gereklidir.