SQLSERVER veritabanına dayalı verimli dizin oluşturun

Genel Bakış

Sqlserver, üretim veritabanının üçte birini oluşturuyordu, bu nedenle bugün esas olarak sqlserver veritabanında bir indeksin nasıl oluşturulacağından bahsedeceğim.

1. Dizine genel bakış

Bir indeks oluşturmanın genellikle şu iki amacı vardır: indekslenmiş sütunların benzersizliğini korumak ve tablodaki verilere hızlı bir şekilde erişmek için bir strateji sağlamak.

Büyük veritabanları için iki tür dizin vardır: kümelenmiş dizinler ve kümelenmemiş dizinler:

1) Kümelenmemiş dizin tabloları verileri bir yığın yapısında depolar ve tüm veriler tablonun sonuna eklenir;

2) Bir küme indeks tablosunun verileri fiziksel olarak küme indeks anahtarı sırasına göre depolanır ve bir tablo için sadece bir küme indeksine izin verilir.

Bu nedenle B-ağaç yapısına göre her türlü indeks eklemenin indeks sütununa göre sorgulama hızını artırabileceği ancak özellikle dolgu faktörü (Doldurma Faktörü) büyük olduğunda ekleme, güncelleme ve silme işlemlerinin performansını düşüreceği anlaşılabilir. Bu nedenle, çok sayıda dizini olan tablolarda sık ekleme, güncelleme ve silme işlemleri gerçekleştirilir.Tablolar ve dizinler oluşturulurken küçük doldurma faktörleri ayarlanır, böylece her veri sayfasında daha fazla boş alan bırakılır, sayfa bölütleme ve yeniden düzenleme azaltılır. iş.

Dizinler, veritabanından veri almanın en etkili yollarından biridir. Veritabanı performans sorunlarının% 95'i indeksleme teknolojisi kullanılarak çözülebilir. Kural olarak, genellikle mantıksal birincil anahtarlar için benzersiz grup dizinleri, sistem anahtarları için benzersiz grup dışı dizinler (saklı yordamlar olarak) ve herhangi bir yabancı anahtar sütunu için grup dışı dizinleri kullanıyorum. Ancak indeks tuz gibidir, çok fazla yemek tuzlu olur. Veritabanı alanının ne kadar büyük olduğunu, tabloya nasıl erişildiğini ve bu erişimlerin esas olarak okuma ve yazma için kullanılıp kullanılmadığını (yani gerçek kullanımda, disk alanı ek yükü ve işlem ek yükü dahil) tamamen dikkate almalısınız ( Kaynak rekabeti ve kilitleme gibi). Veriler sık sık güncelleniyor veya siliniyorsa, bir dizin oluşturmak uygun değildir)

Aslında indeks özel bir katalog olarak anlaşılabilir. Microsoft SQL SERVER iki dizin sağlar: kümelenmiş dizin (kümelenmiş dizin, kümelenmiş dizin olarak da bilinir) ve kümelenmemiş dizin (kümelenmemiş dizin, kümelenmemiş dizin olarak da bilinir, kümelenmemiş dizin).

2. Kümelenmiş dizin yapısı

SQL Server'da, dizinler bir B-ağaç yapısında düzenlenir.

Kümelenmiş bir dizinin tek bir bölümündeki yapı:

Kümelenmiş dizin (Kümelenmiş Dizin) özellikleri:

  • Kümelenmiş dizinin yaprak düğümü, gerçek veri sayfasıdır
  • Kümelenmiş dizindeki sıralama düzeni, yalnızca veri sayfası zincirinin mantıksal olarak sıralandığı anlamına gelir. Bunları sırayla fiziksel olarak diskte depolamak yerine
  • Satırın fiziksel konumu ve dizindeki satırın konumu aynıdır
  • Her tablonun yalnızca bir kümelenmiş dizini olabilir
  • Kümelenmiş dizinin ortalama boyutu, tablo boyutunun yaklaşık% 5'i kadardır

3. Kümelenmemiş dizin yapısı

Kümelenmemiş dizin ve kümelenmiş dizin aynı B-ağaç yapısına sahiptir, aralarındaki önemli fark aşağıdaki iki noktada yatmaktadır:

  • 1. Temel alınan tablonun veri satırları, kümelenmemiş anahtarların sırasına göre sıralanmaz ve depolanmaz.
  • 2. Kümelenmemiş bir dizinin yaprak katmanı, veri sayfaları yerine dizin sayfalarından oluşur.

Aşağıdaki şekil, tek bir bölümdeki kümelenmemiş bir dizinin yapısını göstermektedir:

Kümelenmemiş Dizin (Kümelenmemiş Dizin) özellikleri:

  • Kümelenmemiş dizin sayfaları veri değil, veri sayfalarına işaret eden sayfalardır.
  • Dizin türü belirtilmezse, varsayılan, kümelenmemiş dizindir.
  • Yaprak düğüm sayfalarının sırası, tablonun fiziksel depolama sırasından farklıdır
  • Her tablonun en fazla 249 kümelenmemiş dizini olabilir
  • Kümelenmemiş dizin oluşturulmadan önce kümelenmiş bir dizin oluşturun (aksi takdirde dizinin yeniden oluşturulmasına neden olur)

4. Kümelenmiş dizin ile kümelenmemiş dizin arasındaki fark

Aslında, Çince sözlüğümüzün gövdesi kümelenmiş bir dizindir. Örneğin, "" kelimesini aramak istersek, doğal olarak sözlüğün ilk birkaç sayfasına döneceğiz, çünkü "" nin pinyini "an" dır ve pinyin'e göre sıralanmış Çince karakterlerin sözlüğü "a" İngilizce harfiyle başlar. "Z" ile biterse, "" kelimesi doğal olarak sözlüğün önünde görünecektir. "A" ile başlayan tüm kısımları ararsanız ve yine de kelimeyi bulamazsanız, bu kelime sözlüğünüzde yoktur; benzer şekilde, "Zhang" kelimesini ararsanız, sözlüğünüzü de Son kısım, çünkü "" nin pinyini "zhang" dır. Başka bir deyişle, sözlüğün gövde kısmı bir dizindir, bulmanız gerekenleri bulmak için diğer dizinleri aramanıza gerek yoktur. Bu tür vücut içeriğinin kendisine "kümelenmiş dizin" olarak belirli kurallara göre düzenlenmiş bir dizin diyoruz. Bir kelimeyi biliyorsanız, otomatik olarak hızlı bir şekilde bulabilirsiniz. Ancak bilmediğiniz ve telaffuzunu bilmediğiniz bir kelimeyle de karşılaşabilirsiniz. Şu anda, bulmak istediğiniz kelimeyi yönteme göre şu anda bulamıyorsunuz, ancak "radikal radikallere" göre aradığınız şeyi bulmanız gerekiyor. , Ve sonra aradığınız kelimeyi bulmak için kelimeden sonraki sayfa numarasına göre doğrudan bir sayfaya dönün. Ancak "radikal liste" ile "kontrol listesi" ni birleştirerek bulduğunuz karakterlerin sıralanması, metnin gerçek sıralama yöntemi değildir Örneğin, "Zhang" ı işaretlerseniz, işaretlenen karakterleri radikalleri kontrol ettikten sonra görebiliriz. Tablodaki "Zhang" sayfa numarası 672 sayfadır, kontrol listesindeki "Zhang" ın üzerindeki "Chi" kelimesi, ancak sayfa numarası 63 sayfa ve "Zhang" altındaki "Çapraz" kelimesi 390 sayfadır. Açıkçası, bu kelimeler "Zhang" kelimesinin üzerinde ve altında yer almıyorlar. Şu anda gördüğünüz art arda üç kelime olan "Chi, Zhang ve Nu" aslında sözlüğün metni olan kümelenmemiş dizindeki sıralarıdır. Kümelenmemiş dizindeki kelimelerin eşlenmesi. İhtiyacınız olan kelimeyi bu şekilde bulabiliriz, ancak iki işlem gerektirir, önce içindekiler tablosunda sonucu bulun ve ardından ihtiyacınız olan sayfa numarasına dönün. Bu tür bir dizine tamamen bir dizin diyoruz ve gövde de tamamen "kümelenmemiş bir dizin". Daha fazla uzantı, kolayca anlayabiliriz: her tablonun yalnızca bir kümelenmiş dizini olabilir, çünkü dizin yalnızca bir yönteme göre sıralanabilir.

Her ikisinin de depolama özellikleri:

  • Kümelenmiş dizin. Tablo verileri, dizin sırasına göre depolanır, bu, dizin öğelerinin sırasının, tabloda kaydedilen fiziksel sıra ile tutarlı olduğu anlamına gelir. Kümelenmiş bir dizin için, yaprak düğüm gerçek veri satırlarını depolar ve artık ayrı bir veri sayfası yoktur. Bir tabloda en fazla bir kümelenmiş dizin oluşturulabilir, çünkü gerçek verilerin yalnızca bir fiziksel sırası olabilir.
  • Kümelenmemiş dizin. Tablo veri saklama sırasının dizin sırası ile ilgisi yoktur. Kümelenmemiş bir dizin için, yaprak düğüm, dizin alanı değerini ve veri sayfasının veri satırına mantıksal bir işaretçi içerir ve satırların sayısı, veri tablosu satırının veri miktarı ile tutarlıdır.
  • Kısacası, kümelenmiş bir dizin seyrek bir dizindir Veri sayfasının üstündeki dizin sayfası, satır işaretçileri yerine sayfa işaretçileri depolar. Kümelenmemiş bir dizin için, yoğun bir dizindir.Veri sayfasının üst dizin sayfasında her veri satırı için bir dizin kaydı depolar.

    5. Kümelenmiş dizin veya kümelenmemiş dizin kullanan senaryolar

    Aşağıdaki tablo, kümelenmiş bir dizinin veya kümelenmemiş bir dizinin ne zaman kullanılacağını özetlemektedir:

    sonuç olarak

    "Su bir tekneyi taşıyabilir veya ters çevirebilir" ve indeks aynıdır. Dizinler alma performansını artırmaya yardımcı olabilir, ancak çok fazla sayıda veya uygun olmayan dizin de sistem verimsizliğine neden olabilir. Çünkü kullanıcı tabloya her indeks eklediğinde, veritabanı daha fazla iş yapmak zorundadır. Çok fazla dizin, dizin parçalanmasına bile neden olabilir. Bu nedenle, veri tabanının yüksek performans alabilmesi için özellikle toplu indekslerin oluşturulması için "uygun" bir indeks sistemi kurmamız gerekiyor.

    Faydalı bulursanız, lütfen iletmeye yardım edin! Daha sonra daha fazla devop ve DBA içeriği paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

    QKL123 piyasa analizi
    önceki
    Cumartesi avantajları! Mikro hizmet operasyon ve bakım savaşı, Kendinizi Tekrar Etmeyin
    Sonraki
    Ma Sichun bu sabah sıcak aranan selülit fotoğraflarına yanıt verdi: Xiao Ma resim 3'te incelmeye karar verdi
    Mysql veritabanı varsayılan ayarlarının üç farklı görünümünü açıklayın
    İPad katili burada! Huawei, bugün 18: 08'de ön satış olan 3299 yuan'dan başlayan MatePad Pro'yu piyasaya sürdü
    MySQL'in eşzamansız çoğaltmasını, tam eşzamanlı çoğaltmayı ve yarı eşzamanlı çoğaltmayı tek bir makalede anlayın
    Bölüm aktarımı için bir üretim veritabanı veri dosyasını hatırlayın
    CCTV Finansal İnceleme Para yatıyor, aylık gelir? Blockchain'in "her yerde aldatmasına" izin vermeyin
    İki pratik komut dosyasını paylaşın - MySQL veritabanı tek tıklamayla konum engelleyen işlem kaynağı SQL
    MySQL Innodb, SQL işlemlerini engellemenin kaynağını bulur - innotop aracı
    Oracle veritabanı kullanıcı bilgileriyle ilgili tek tıklamayla iki kabuk komut dosyasını paylaşın
    Centos7'ye dayalı ES izleme aracını çevrimdışı dağıtın - elasticsearch head
    İlk Chongqing Kuantum ve Optoelektronik Teknoloji Sanayileşme Semineri düzenlendi
    İki kabuk komut dosyasını, tek tıklamayla istatistik veritabanı geçici tablo alanını ve engelleme kilit bilgilerini paylaşın
    To Top