Bana kalırsa...
Veritabanının ve uygulamalarınızın gereksinimlerini karşılamanız gerekir.
Her tabloya otomatik olarak artan bir tam sayı veya uzun id sütunu ekleyerek birincil anahtar olarak hizmet vermek veritabanı gereksinimlerini karşılar.
Daha sonra, uygulamanızın kullanması için tabloya en az bir benzersiz dizin daha eklersiniz. Bu çalışan_kimliği, hesap_kimliği veya müşteri_kimliği vb. Üzerindeki dizin olabilir. Mümkünse, bu dizin bileşik bir dizin olmamalıdır.
Çeşitli alanlardaki endeksleri tek tek bileşik endekslere tercih ederim. Veritabanı, where cümlesi bu alanları içerdiğinde tek alan indekslerini kullanır, ancak alanları tam olarak doğru sırada sağladığınızda yalnızca bir bileşik kullanır - yani, siz sağlamadığınız sürece bir bileşik dizindeki ikinci alanı kullanamaz. where cümlenizdeki hem birinci hem de ikinci.
Ben tamamen hesaplanmış veya Fonksiyon tipi indeksleri kullanmaktan yanayım ve bunların bileşik indeksler yerine kullanılmasını tavsiye ederim. Where cümlenizde aynı işlevi kullanarak işlev indeksini kullanmayı çok kolaylaştırır.
Bu, başvuru gereksinimlerinizi karşılar.
Diğer birincil olmayan endekslerin aslında anahtar değerini rowid () 'ler ile değil, bir birincil anahtar değerine dizinler. Bu, fiziksel sıralama işlemlerinin ve silmelerin bu indeksleri yeniden oluşturmak zorunda kalmadan gerçekleşmesine izin verir.