On binlerce dizin, önce performans: veritabanı indeksleme ilkesini basit bir şekilde açıklayın

Dizin beni binlerce kez taciz etti ve dizini ilk aşk olarak bekliyorum

Birisi indeksin ne olduğunu sorduğunda, herkes "kitap kataloğu" nu bir benzetme olarak kullanmayı sever. İndeksi olmayan bir veritabanı, katalogsuz bir kitap gibidir. Bölüm 3'ün yedinci alt bölümünü bulmak istiyorsanız, her sayfayı aramanız gerekir. En korkunç olanı kitabı teslim etmeden önce teslim etmeniz gerektiğidir, aksine indeksli bir veri tabanı kataloğu olan bir kitaptır ve onu doğrudan katalogdan bulabilirsiniz.

Bir kitap kataloğu koyarsanız ve insanlar aramaya gelirse, veritabanını nasıl "ararsınız"? "Katalog" nasıl yerleştirilir?

Önce "dizini" nasıl yerleştireceğimize bir göz atalım.

Veritabanı kurulduktan sonra, kurulum programı otomatik olarak, diğer sistem veritabanlarını, kullanıcı veritabanlarını ve veritabanı sistem bilgilerini depolamak ve yönetmek için kullanılan ana veritabanı ana veritabanı olan ana, model, tempdb gibi birkaç özel "sistem veritabanı" oluşturacaktır. .

Adında bir usta var sysindexes Sistem tabloları, özellikle dizinleri yönetir. Veritabanı sorgulama veri tablosu işlemleri için kullanılmalıdır, şüphesiz bu makalenin baş kahramanlarından biridir.

Not: Bir tablonun dizin özelliklerini görüntülemek için, sorgu çözümleyicide aşağıdaki komutu kullanabilirsiniz: id = nesne_kimliği ('tablename') olan sysindexes'ten * öğesini seçin. Tablename parametresi, indekslenmiş tablonun adıdır.

Bu nedenle, şimdi bir tanıma sahibiz: indeks özel olarak bir tabloya yerleştirilir ve konum diğer veri tablolarından farklıdır.

Daha sonra veritabanı "arama", önce dizini aramak ve ardından verileri aramak anlamına gelir. o kadar basit değil.

İlk önce iki kavramı tanıtın: kümelenmiş dizin, kümelenmemiş dizin

  • Kümelenmiş dizin , İndeks tablosunun sırası, karşılık gelen veri tablosunun sırası ile aynıdır İndeks tablosu alan kimliğine göre sıralanırsa, karşılık gelen veri tablosu da tutarlıdır.
  • Kümelenmemiş dizin , Dizin tablosu sırası karşılık gelen veri tablosu ile tutarsızsa, mantıksal sırayı belirtir, ardından veri tablosu ekleme sırasına göre sıralanır.

İkisinin özelliklerine göre, avantajlarını ve dezavantajlarını özetlemek kolaydır, yani kümelenmiş indeksin aranması daha hızlıdır ve dezavantajı, tabloyu değiştirmenin daha yavaş olmasıdır, çünkü veri sırasının tutarlı tutulması gerekir ve kümelenmemiş indeks tam tersidir. Uygulanabilir senaryoları aşağıdaki gibidir:

Şimdi denge ağacını tanıtalım

"İçindekiler tablosu" na dönersek, Bölüm 3, Bölüm 7'nin 236. sayfada olduğunu bildiğimizde, onu gelişigüzel çevirebilirsiniz, ancak daha bilimsel bir yöntem: önce kitabın yaklaşık yarısına dönün, sonra ikinci Kitabın sonraki yarısını bulun ve bu şekilde, doğru sayfa sayısını bulana kadar, algoritmaya aşina olan öğrenciler bunun yaygın bir "ikilem" olduğunu göreceklerdir, Microsoft'un resmi eğitim MOC'sinde bir tane daha vardır. Açıklama: B-ağacı (Denge Ağacı), yani dengeli ağaç olarak adlandırılır.

Dizinin uygulanması, B + ağacının veri yapısını kullanır B + ağacındaki gerçek veriler yaprak düğümlere yerleştirilir ve yalnızca dizin verileri yaprak olmayan düğümlerde saklanarak mümkün olduğunca çok veri öğesi olmasını sağlar.

(B ve B + ağacı arasındaki fark, B + ağacının yaprak olmayan düğümlerinin yalnızca gezinme bilgilerini içermesi ve gerçek değerleri içermemesidir. Tüm yaprak düğümler ve bağlı düğümler, aralıklı arama ve geçiş için uygun olan bağlantılı bir liste ile bağlanır.)

Bu iki kavramın bilgisine dayanarak, veritabanının nasıl "arandığından" bahsedelim.

Geç Kümelenmemiş dizin Giriş Durum Detaylandırmak için.

Ad parametresinde kümelenmemiş bir dizinin kurulduğunu varsayarsak, aşağıdaki ifade yürütüldüğünde sorgu işlemi şu şekildedir:

* Üyeden Seçin Burada isim = 'Zhang San'
  • Veritabanı sorgusu INDID değeri 2'dir; bu, tabloda kümelenmemiş bir dizin sayfası olduğu anlamına gelir;
  • Hemen kökten başlayın, yaprak düzeyinde olmayan düğümler arasında "Zhang San" a en yakın olan "Li Si" değerini bulun ve yaprak düzeyi sayfanın 61. sayfasında yer aldığını bulun;
  • Yalnızca yaprak düzeyi sayfanın 61. sayfasındaki "Li Si" altında "Zhang San" RID'sini arayın.RID'si N: 706: 4 olarak görüntülenir, bu da ad alanındaki "Zhang San" adlı kaydın yığının 707.'sinde olduğu anlamına gelir. Sayfanın 4. Satırı
  • Yukarıdaki bilgilere dayanarak, veritabanı yığının 707. sayfasındaki 4. satırdaki kaydı hemen "çekti" ve ön planda (müşteri) görüntüledi. Tablodaki veri miktarına bağlı olarak, tüm sorgu süreci birkaç yüz milisaniyeden birkaç milisaniyeye kadar sürer.
  • Son olarak, indekslerin avantaj ve dezavantajlarından bahsedelim

    Endeksin bazı içsel eksiklikleri vardır:

    • Bir dizin oluşturmak için sistem, dizini kaydetmek için tablonun sabit diskinin ve bellek alanının yaklaşık 1,2 katını alır.
    • Verileri güncellerken, verilerin ve dizinin tutarlılığını korumak için sistem aynı zamanda dizini güncellemek için fazladan zamana sahip olmalıdır - bu, dizin dolabını yerleştirmek için özel bir konuma sahip bir kitaplık gibidir ve kitaplar stokta olduğunda Değişiklikler meydana geldiğinde, endeksi envanterle tutarlı tutmak için birinin dizin kartını yeniden düzenlemesi gerekir.

    Elbette, indekslemenin avantajları da açıktır: büyük veri durumunda, indeks makul bir şekilde oluşturulmuşsa, sorguları yürütmek, sonuçları sıralamak ve gruplandırmak için veritabanının operasyonel verimliliğini büyük ölçüde artıracaktır.

    Uygulama, uygun olmayan indekslemenin sadece yararsız olmadığını, aynı zamanda sistem performansını da azaltacağını göstermektedir. Çünkü çok sayıda dizin, ekleme, değiştirme ve silme işlemlerinde dizinsiz işlemlere göre daha fazla sistem zamanı harcar. Örneğin, aşağıdaki alanlarda dizin oluşturmak uygun olmayabilir: 1. Nadiren veya hiç alıntılanmayan alanlar 2. Erkek veya dişi gibi mantıksal alanlar (evet veya hayır).

    Özetle, sorgu verimliliğini artırmak, belirli sistem kaynaklarını tüketme pahasına gelir.İndeksler körü körüne kurulamaz ve genel planlama yapılmalıdır. "Sorguyu hızlandır" ve "değiştirme hızını azalt" arasında bir denge olmalıdır Kazançlar ve kayıplar olacak ve kayıp, kazanca yol açacaktır. Bu, bir DBA'nın mükemmel olup olmadığını test etmek için çok önemli bir göstergedir.

    "Kızıldeniz Operasyonu" nun dört eksikliği: Bazı karakterler utanç verici, birçok savaş var
    önceki
    Shaw = Otoriter CEO? Zhang Han'ın dönüşümü "Wolf Warrior 2" den sonra başarısız oldu
    Sonraki
    Li Yuchun Gişe Ofisi: Yalnızca altı iş, ancak yaklaşık 5 milyar gişe, en iyi itibar bu
    Douban 8.5, yılın ilk ona girdi
    "Dedektif Çin Mahallesi 2" nin üç izlenimi: Son katil, gerçek katil olmayabilir
    Girişten uygulamaya Nginx'i açıklayın
    Biri bana Daniel Wu'nun neden tuğlayla bile bu kadar yakışıklı olabileceğini söyleyebilir mi?
    9 Mayıs oyuncu kutlamasında yeni Tianlong Babu canlı yayında 4 sır açıklandı
    Zhang Yinin en önemli 8 film çalışması: "Kızıldeniz Operasyonu" en yüksek gişeye sahip olsa da en iyisi olması gerekmez
    Döviz kuru garantisi, döviz rezervi garantisi veya garanti fiyatı?
    Bai Baihe Gişe Ofisi: Toplam değer Wu Jing ve Wang Baoqiang gibi birinci kademe erkek yıldızları aşıyor ve dokuz film 100 milyonu aşıyor
    Kagemusha dosyaları silmiyor ve paylaşım ekonomisinin resmi lansmanı süper havalı
    2019 Sevgililer Günü'nde programcılar sevgi konusunda çok gösterişli ~
    Yılın en utanç verici romantizmi Su Yan Tanrıçası ve Wang Lichuan mürettebatla çarpıştı
    To Top