Buraya farklı veritabanlarının farklı stratejiler gerektirdiğini eklemek istiyorum. Mesela MySQL ile w / InnoDB ve PostgreSQL'i karşılaştıralım.
InnoDB'nin
InnoDB tabloları temelde, dizin girişine satır bilgisini içerecek şekilde genişletilen birincil anahtarın bir b-ağacı indeksidir. Fiziksel sipariş taramaları desteklenmez ve tüm taramalar mantıksal sırada gerçekleşir. Bu iki şey demektir:
Innodb'deki sıralı bir tarama çok fazla rasgele disk G / Ç üretir ve
Birincil anahtar endeksinin, bir ikincil indeks kullanıp kullanmadığından bağımsız olarak geçilmesi gerekir.
Birincil anahtar aramaları bu modelde diğer tüm yaklaşımlardan daha hızlıdır.
Bu durumda, çok sayfalı tablolarda yeterli alan dizini oluşturmak çok önemlidir. Tipik kural, filtrelemek istediğiniz her şeyi dizindir.
PostgreSQL
PostgreSQL, yığın dosyalarının bir yığın boş alandan tahsis edildiği dosya başına bir tablo (bazı tablolar çok sayıda dosya olabilir) kullanır. Fiziksel sipariş taramaları desteklenir. Mantıksal sipariş taramasının çalışması için bir dizin eklenmelidir.
PostgreSQL'deki birincil anahtarlar temelde hiçbir değerin NULL olamayacağı benzersiz endekslerin alt kümesidir. UNIQUE kısıtlamaları örtük dizinler kullanılarak yapılır ve dizinde olası farklı işlemlerle başka dizin türleri de desteklenir.
Bunun anlamı:
Birincil anahtar aramalar, bir indeks dosyasına ve bir tablo dosyasına isabet eden oldukça büyük bir tablerequire olduğunu varsayar . Bu, MySQL'in yalnızca dizinin geçilmesi ve satırın dizinde bulunması gerektiği yaklaşımından önemli ölçüde daha yavaştır.
Fiziksel sıra taramaları çok daha iyi performans gösterir ve önemli sayıda satırın işleneceği rasgele disk G / Ç'yi azaltır.
İkincil dizin taramaları, MySQL'lerden daha iyi performans gösterir, çünkü tablonun fiziksel kısmına ulaşmak için yalnızca bir indeksin geçilmesi gerekir.
Bu modelde, endeksler sıklıkla gereklidir, ancak planlayıcı, bir endeks kullanırken ne zaman daha fazla özgürlüğe sahiptir ve bir tane kullanmamanın etkileri genellikle daha az şiddetlidir. Tablolar daha genel olarak optimize edilmiştir (pkey aramalarında uzmanlaşmak yerine) ve bu yüzden daha az endeks gereklidir.
TL; DR
RDBMS'nizi bilin.