Dizinleri tanımlarken sütunların belirli sıralamasında herhangi bir fayda var mı


13

Örneğin, iki dizinim varsa:

CREATE INDEX IDX_1 ON MY_TABLE_1
 (ITEM, DATE, LOCATION)
 COMPUTE STATISTICS;

CREATE INDEX IDX_2 ON MY_TABLE_1
 (DATE, LOCATION, ITEM)
 COMPUTE STATISTICS;

Bu IDX_2gereksiz olur mu? Değilse, sütunları bildirme sırasını nasıl belirlerim?

Dizinleri düzenli sorgulara uyarlamalı mıyım?

Yanıtlar:


12

Evet, yarar, dizinin bir bölümünde sorgulamak istediğinizde gelir. Kısmen kullanılan tahminleri ilk olarak koyarsanız, dizin, bu tahminleri içeren sorgular için kullanılabilir, ancak dizindeki tüm sütunları içermez.

Ayrıca, başka gereksinimleriniz yoksa, en seçici tahminleri ilk sıraya koymaya yardımcı olabilir, çünkü bu, dizin arama işlemlerini daha hızlı kesebilir.

Senin durumunda IDX_2mutlaka yedekli masaya sorguları niteliğine bağlı değildir. Ancak, tüm sütunları dahil etmek gerekli olmayabilir. Örneğin, sen tarafından sorguları bir sürü yaparsanız locationve datesonra IDX_2olarak bu sorgular yardım kararlılığının yararlı olabilir IDX_1bunun için yararlı olduğu doğru sırayla değil. Ancak itembunun gereksiz olduğunu görebilirsiniz IDX_2.

9i'den itibaren Oracle, sondaki dizin sütunlarının daha verimli bir şekilde sorgulanabileceği bir "atlama taraması" operatörü tanıttı ve bu da bu tür ek dizinlere olan ihtiyacı azaltabilir.

Daha spesifik bir durumda, sorgulama eğer itemtarafından locationve datemasanın bir şey okumak zorunda kalmadan sonra sorgu dizinden tamamen olsa çözülebileceğini başka sütunları gerekmez. Ayrıca, dizine eklenmemiş sütunlar içeren kaplama dizinleri de oluşturabilirsiniz. Gerekli sütunların tümü kaplama dizininden çözülebiliyorsa, sorgunun ana tabloya hiç dokunması gerekmez.

Son olarak, son sorunuza cevap olarak: Çok fazla kaynak tüketen ve bir dizin kullanarak ayarlanabilen düzenli olarak kullanılan bir dizi sorgunuz varsa, kesinlikle dikkate almaya değer. Ancak, dizinleri korumak ekler üzerinde bir ek yük ile gelir, bu nedenle sorgu performansını ekleme veya güncelleme işlemlerinde dizinlerin yerleştirdiği ek yüke karşı takas etmeniz gerekir.


3
@ConcernedOfTunbridgeWells: Alternatif bir yaklaşım, dizin anahtarı sıkıştırmasını kullanmak ve daha az seçici (daha az farklı değer) sütunun öncülük etmesidir. Atlamalı taramaların iyi çalışmasına izin verirken, daha küçük bir dizine yönlendirmeye yardımcı olur.
Adam Musch

2

Dikkate alınması gereken başka bir şey, çok sayıda boş değerli sütunlardır.

Bu sütunlarda dizinde kendilerinden sonra belirtilen sütunlar varsa, boş değerlerin dizine eklenmesi gerekir. Aksi takdirde, her zamanki gibi, null değerler dizine eklenmez (elbette, bu bir b-ağacı dizini kullandığınızı varsayar).

Bu nedenle, çok sayıda boş değer içeren sütunlarınız varsa, bunları dizinin sonuna koymak size önemli miktarda disk alanı kazandırabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.