Ayrıntılı Oracle bileşik dizini + örnek açıklaması

Bileşik indeksi

Adından da anlaşılacağı gibi, bileşik bir dizin tek sütunlu bir dizinden farklıdır ve iki veya daha fazla sütundan oluşan bir dizindir. B ağacındaki veri yapısı nedir? Aşağıdaki şekilde gösterildiği gibi, iki sütunlu bileşik bir indekstir.

Dikkatlice gözlemlerseniz, yaprak düğümlerinin artan ASC'ye göre sıralandığını göreceksiniz. Şimdi ilk değere göre sıralayın ve ardından ikinci değere göre sıralayın. Aynısı kontrol için de geçerlidir, önce ilk değeri kontrol edin ve ikinci değeri kontrol edin. Üç sütundan oluşan bileşik bir dizin veri yapısının nasıl göründüğünü hayal edebilirsiniz.

Gerçekte bir tablo oluştururken, başlangıçta yalnızca bir birincil anahtar kimliği oluşturulur ve Oracle varsayılan olarak birincil anahtar için bir dizin oluşturur. Deneyim arttıkça performansı değerlendirmeye ve sorgu raporları ve siparişler gibi iş senaryoları gibi dizinleri incelemeye başlıyorum. Şu anda, az ya da çok dizin oluşturulacak ve ardından bileşik dizinler çalışmaya başlayacaktır. Bileşik indeksin getirdiği ilk soru, zihninizdeki B ağacında bir bileşik indeks yapısını nasıl oluşturacağınızdır? Ardından, bileşik bir endeksin nasıl oluşturulacağı sorusu geliyor.

Dizinin oluşturulması, sorgu verimliliğini artırmak içindir, ancak dizin tasarımı mantıksızdır ve yazma performansını etkiler, tıpkı CAP'nin koşullardan yalnızca ikisini karşılayabileceği gibi. Yani mükemmel bir şey yok, her şey çelişki içinde ilerliyor. Açıkça söylemek gerekirse, hedefe ulaşmak için en az, en basit yapı indeksini kullanmaktır.

Temel ortam

Temel tablo:

Açıklama:

1. A, b ve c sıklıkla sorgulanır ve sık sık a, b ve c kombinasyon sorgusu olasılığı vardır

2. a sütunu çok ayırt edilemez ve hem b hem de c ayırt edilebilir (değerler çok fazla tekrarlanmayacaktır)

Fikirler:

1. Sırasıyla a, b ve c üzerine tek sütunlu dizinler oluşturun, yani nihayet üç dizine sahibiz, yani (a), (b) ve (c). Tabii ki olabilir. Ama daha iyisi var mı?

2. (a, b), (b, c), (a, c) üzerinde bileşik bir indeks oluşturun. Sorun değil, ancak bakım maliyeti daha pahalı, daha iyisi var mı?

3. (a, b, c) üzerinde bileşik bir indeks oluşturun. Bunun bakımı da pahalıdır. Ve baştaki sütun olarak, a çok ayırt edilemez, bu da çok iyi bir seçim değildir.

4. En iyi yol, (b, c) üzerinde bileşik bir dizin ve c üzerinde tek sütunlu bir dizin oluşturmaktır, böylece (b, c) dizini a ve b ve b ve c sorgularını kapsayabilir ve c tek sütunlu dizini kapsayabilir Sorgulamak için a ve b'ye gidin.

Örnek test

1. Bir test tablosu oluşturun

TABLO OLUŞTUR sunyang_test ( kimlik Numarası, bir sayı, b numarası, c numarası ) tablo alanı ebiz; tabloyu değiştir sunyang_test kısıtı ekle pk_sunyang_test birincil anahtarı (id) indeks tablo alanını ebiz kullanarak;

2. Verileri girin

başla 1 .. 100000 döngüdeki i için sunyang_test değerlerine (i, mod (i, 2), mod (i, 20000), mod (i, 20000)) ekleyin; son döngü; taahhüt; son;

3. Bir dizin oluşturun

sunyang_test (b, c) tablo alanı ebiz üzerinde idx_sunyang_test_bc indeksi oluşturun; sunyang_test (c) tablepace ebiz üzerinde idx_sunyang_test_c indeksi oluşturun;

4. Aşağıdaki SQL'i yürütün

sunyang_test'ten * öğesini seçin, burada b = 5000;

Uygulama planı:

sunyang_test'ten * seçin, burada c = 5000;

Uygulama planı:

sunyang_test'ten * öğesini seçin; burada a = 1 ve b = 5000;

Uygulama planı:

sunyang_test'ten * öğesini seçin, burada a = 1 ve c = 5000;

Uygulama planı:

sunyang_test'ten * seçin, burada b = 5000 ve c = 5000;

Uygulama planı:

sunyang_test'ten * seçin; burada a = 1 ve b = 5000 ve c = 5000;

Uygulama planı:

Görülebileceği gibi, a sütunu çok ayırt edilebilir olmadığında ve tek sütunlu sorgular veya a, b ve c'nin birleşik sorguları gerektiğinde, indekslemenin tüm sorgu koşullarını kapsayacağı ve dizinin karmaşık olmadığı görülebilir.

Bileşik indeksin tasarımı, öndeki sütunun (yani, bileşik indeksteki ilk sütun) seçimi için çok önemlidir.A'nın ayrımı çok düşük olduğundan, en azından burada bir bileşik indeksin ön sütunu olarak a seçilmemelidir. Bazıları, bir INDEX ATLAMA TARAMASI yok mu? Bu gerçekten a'nın gerçek değerine bağlıdır. Eğer a'nın değeri buradaki ikisi gibi çok küçükse, INDEX SKIP SCAN'a gidebilirsiniz, aksi takdirde ek yük çok büyüktür, Oracle genellikle doğrudan FULL TABLE SCAN'a gider ve gitmez INDEX SKIP SCAN, çünkü indeks bölme içerir.

Daha sonra daha fazla DBA içeriği paylaşılacak, ilgilenen arkadaşlar takip edebilir!

Wang Feng'in kızı Xiaopingping, fotoğraf çekiyor, dilini kameraya seksi gösteriyor ve ağır makyajlı ailesiyle ilgilenmiyor mu?
önceki
Siemens invertör nasıl öğrenilir? Siemens öğretmeni ne dedi gördün mü?
Sonraki
Telefon hafızası açıklanamayacak kadar kısadır! WeChat çok can sıkıcı, kapattıktan sonra çok fazla yerden tasarruf sağlıyor!
Lin Chiling partide Liu Ye'nin yanına oturdu, Liu Ye sakince kavun tohumlarını kemirerek uzağa baktı
Elektrikçilerle mi başlıyorsunuz? Dinamik diyagramlar, elektrikli cihazların işlevlerini gösterir ve elektrikçi simülasyonu uygulamalı beceriyi uygular! Haydi!
Onu suçlama! İntihal ile suçlanan WeChat "atlama" oyunu, netizenler: önemli olan Tencent'in satın alınması
Seksi anne Li Yanan, sevimli bebeğini dinamik bir şekilde gönderir ve kayınvalidesinden kopyala yapıştır gibi kızının uyuyan yüzünü taklit etmesini ister.
Siemens PLC iletişimi S120 frekans dönüştürücüyü kontrol eder, PLC programı frekans dönüştürme parametresi ekler, siz de öğrenebilirsiniz!
Wang Ou hacklenecek mi? Gizli evlilik söylentileri var ve öğrencisi Yang Mi'den bir çocuğu olduğu söyleniyor.
Jailbreak eklentisi: iPhone'un her zaman gelen aramaları reddetme işlevi olmasına izin verin!
OPPO, Asya pazarında cep telefonu payında birinci sırada
Faye Wongun eski kocası Dou Wei tesadüfen fotoğraflandı, alnı uzun Akdeniz saçlarıyla parladı ve arkasındaki teyzesiyle yüzüne çarptı.
Apple yabancı medya tarafından tükendi. 999 dolarlık cep telefonunun hızlı bir şarjı bile yoktu!
iPhone X çok soğuk! Yetersiz piyasa talebi veya fiyat indirimleri, netizenler: Yıl sonunda frekansı azaltın!
To Top