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.
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).
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ü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:
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:
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ı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.
Aşağıdaki tablo, kümelenmiş bir dizinin veya kümelenmemiş bir dizinin ne zaman kullanılacağını özetlemektedir:
"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 ~