sıralama". İndeksleme seçeneğini kullanmanın özellikleri "Ek ile indeksleme

Bugün MS SQL DBMS indekslerinden ve iç yapılarından bahsedeceğiz. Endekslerden hem DBMS açısından hem de 1C 8.3 açısından bahsetmeye çalışacağım.

Dizinler, MS SQL DBMS'nin performansını optimize etmek için oluşturulan, belirli sütunlar tarafından sıralanan bir dizi bağlantıdır.

Örtük olarak dizinler oluşturma:

Platform, her bir meta veri nesnesi (bağlantı, kod, ad, ölçümler vb.) için önceden bilinen veri anahtarlarını kullanarak dizinleri kendisi oluşturur.

Açıkça Dizinler Oluşturmaüç şekilde mümkündür:

  1. Bir alan (özellik/boyut) için “Dizin” bayrağını ayarlama. Seçenek "Ek içeren dizin" ordering", dizine "Kod" veya "Ad" alanını ekler (öncelikle için).
  2. " " alanına bir alan ekleniyor.
  3. “ “ yapısını kullanarak sorguda indekslenen alanı belirtme.

1C'de 267 video dersini ücretsiz alın:

Microsoft SQL DBMS'deki dizinler

MS SQL DBMS'deki indeksler, her biri 8 KB'lık veri içeren sayfalardır. Dizinlerin DBMS'nin performansını artırmak için tasarlanmış olmasına rağmen, bazı dezavantajları vardır - disk alanı kaplarlar ve DBMS'nin satır yazma çalışmasını yavaşlatırlar.

MS SQL DBMS'deki indeks türleri:

  1. Kümelenmemiş dizinler— bu tür dizinler tabloları yeniden oluşturmaz, yalnızca bağlantıları düzenler.
  2. Kümelenmiş Dizinler indeksine uygun bir tablo oluşturmak gerekmektedir. Veriler örneğin alfabetik olarak düzenlenir. Sık sık değişen sütunlar için geçersiz çünkü DBMS bu dizini kullanarak tabloyu sürekli olarak fiziksel olarak yeniden oluşturur.
  3. Benzersiz dizinler- kümelenmiş ve kümelenmemiş dizinler için bir tür "üst yapı". Böyle bir indeks, anahtar alanlara göre benzersizdir.

Bir DBMS'deki anahtar türleri:

  • Birincil anahtar— bir satırı benzersiz şekilde karakterize eden bir dizi sütun.
  • Yabancı anahtar (yabancı)— tablolar arasındaki ilişkileri düzenlemek amacıyla birincil anahtar değerini saklayan bir tablo alanı. 1C bu tür tuşları kullanmaz.

Endeks kullanmanın önemli nüansları

Dizinlerin doğru kullanımı, sorguları yalnızca kat kat değil, yüzlerce, hatta bazen binlerce kat hızlandırabilir.

Bu tür bir hızlanma donanımla elde edilemez. Bu nedenle bu konuya çok dikkat edilmesi gerekmektedir.

Genellikle bir sorguyu hızlandırmak için kendi dizininizi oluşturmanız gerekir ve bunu yapmanın birkaç farklı yolu vardır.

Video eğitimlerinde dizin oluşturmanın çeşitli yollarına bakacağız. Ayrıca, gerekli bileşime sahip bir endeksin standart platform araçları kullanılarak oluşturulamadığı ve DBMS'de oluşturulmasının gerekeceği bir durumu da ele alacağız.

Standart platform araçlarını kullanarak dizinleri ayarlama

Ders, DBMS düzeyindeki nesneler için gerçekte hangi dizinlerin oluşturulduğunu gösterir.
Bu konudaki her şey ilk bakışta göründüğü kadar açık değildir. Sonuçta, bir dizi nesne için indeks oluşturma özellikleri vardır.
Bu videoda tüm detaylara bakacağız.

Ek sıralamayla indeksleme

Videoda indeks oluşturma seçeneği arasındaki fark gösteriliyor Dizin itibaren Ek içeren dizin sipariş vermek.
Örnek, ek sipariş kullanıldığında platformun ne tür bir dizin oluşturacağını gösterir.

Kayıt Boyutları için Dizin Oluşturma

Kayıtların ilk boyutunun indekslenmesinin birkaç nüansı vardır.
Video, kayıt ölçümleri için hangi indekslerin oluşturulduğunu gösterir. Birinci kayıt boyutunun indekslenmesi durumu da dikkate alınır.

veya

Bir 1C geliştiricisinin neden kayıt boyutlarını ve ayrıntılarını "indekslemesi" gerekiyor?

- Peki, isteklerin var! - veritabanı dedi ve kapattı...

Başlıktaki sorunun kısa cevabı, bunun sorguların hızlı bir şekilde çalıştırılmasına olanak tanıyacağı ve kilitlerin .

İndeks nedir?

Dizin Yerleşimini Optimize Etme

Tabloların hacmi bunların sunucunun RAM'ına "sığmasına" izin vermediğinde, disk alt sisteminin (G/Ç) hızı önce gelir. Ve burada indeksleri farklı sabit sürücülerde bulunan ayrı dosyalara yerleştirme yeteneğine dikkat edebilirsiniz.

Eylemlerin ayrıntılı açıklaması http://teknet.microsoft.com/ru-ru/kütüphane/Hanım175905.aspx
Farklı bir dosya grubundan bir dizin kullanmak, G/Ç işlemlerinin eşzamanlılığı ve dizinin kendisi üzerinde çalışması nedeniyle kümelenmemiş dizinlerin performansını artırır.
Boyutları belirlemek için yukarıda belirtilen işlemi kullanabilirsiniz.

Endekslerin kilitler üzerindeki etkisi

Bir sorgu için gerekli endeksin bulunmaması, tüm tablo kayıtlarının yinelenmesi anlamına gelir ve bu da gereksiz kilitlere yol açar; Gereksiz kayıtlar engellenir. Ek olarak, eksik dizinler nedeniyle bir sorgunun tamamlanması ne kadar uzun sürerse kilit tutma süresi de o kadar uzun olur.
Kilitlenmelerin bir diğer nedeni ise tablolardaki kayıt sayısının az olmasıdır. Bu bağlamda, SQL Server, bir sorgu yürütme planı seçerken indeks kullanmaz, ancak tüm tabloyu tarayarak (Tablo Taraması) tüm tabloyu bloke eder. Bu tür engellemelerin önüne geçebilmek için tablolardaki kayıt sayısının 1500-2000'e çıkarılması gerekmektedir. Bu durumda tabloyu taramak daha pahalı hale gelir ve SQL Server indeksleri kullanmaya başlar. Elbette bu her zaman yapılamaz; “Organizasyonlar”, “Depolar”, “Bölümler” vb. gibi bir takım dizinler oluşturulur. genellikle birkaç girişi vardır. Bu durumlarda indeksleme performansı iyileştirmeyecektir.

Dizin performansı

Indexlerin sorgu performansına etkisi ile ilgilendiğimizi yazının başlığında belirtmiştik. Bu nedenle, dizinler aşağıdaki görev türleri için en uygun olanlardır:

  • "Dar" arama kriterlerini belirten sorgular. Bu tür sorguların yalnızca belirli kriterleri karşılayan az sayıda satırı okuması gerekir.
  • Bir değer aralığını belirten sorgular. Bu sorguların da az sayıda satırı okuması gerekir.
  • Bağlantı işlemlerinde kullanılan bir arama. Genellikle bağlama anahtarları olarak kullanılan sütunlar dizinler için idealdir.
  • Verilerin belirli bir sırayla okunduğu bir arama. Sonuç kümesi kümelenmiş dizin sırasına göre sıralanacaksa, sonuç kümesi zaten önceden sıralanmış olduğundan sıralamaya gerek yoktur. Örneğin, soyadı, adı sütunlarında kümelenmiş bir dizin oluşturulduysa ve uygulama önce soyadına, ardından adına göre sıralama yapılmasını gerektiriyorsa, ORDER BY cümlesinin eklenmesine gerek yoktur.

Doğru, indekslerin tüm kullanışlılığına rağmen çok önemli bir AMA vardır - indeks "verimli bir şekilde kullanılmalı" ve verilerin daha az G/Ç işlemi ve daha fazla sistem kaynağı kullanılarak bulunmasına izin vermelidir. Tersine, kullanılmayan (nadiren kullanılan) dizinlerin veri yazma performansını düşürme olasılığı daha yüksektir (çünkü verileri değiştiren her işlem aynı zamanda dizin sayfalarını da güncellemelidir) ve aşırı veritabanı alanı oluşturur.

Kaplama(belirli bir istek için) bu istek için gerekli tüm alanları içeren dizin olarak adlandırılır. Örneğin, a, b ve c sütunlarında bir dizin oluşturulmuşsa ve SELECT ifadesi yalnızca bu sütunlardaki verileri sorguluyorsa, yalnızca dizine erişim gereklidir.

Endeksin etkinliğini belirlemek için, “sorgu yürütme planını” ve kullanılan endeksleri gösteren ücretsiz bir çevrimiçi hizmet kullanarak kabaca tahminde bulunabiliriz.

Meta verilerdeki çeşitli nesnelerin ayrıntılarını açıklarken Index özelliğini ayarlamak mümkündür. Bu özellik, konfigürasyon geliştiricisinin, ilgili ayrıntılar için veritabanında ayrı bir dizin oluşturma ihtiyacını sisteme belirtmesine olanak tanır.

Bu özellikteki "Dizin" seçeneğine ek olarak çoğu nesne için "Ek sıralamayla dizin" seçeneğini ayarlayabilirsiniz. Bu seçenek öncelikle dinamik listelerde kullanılmak üzere tasarlanmıştır.

"Dizin" seçeneğinde doğrudan ayrıntılara dayalı bir dizin oluşturulur. Ayrıca indeks, öznitelik değerleri tekrarlandığında indeksteki kayıtların belirli bir sırasını sağlamak için bir bağlantı ile desteklenir.

"Ek sıralamalı dizin" seçeneğinde, dizin, özniteliğin yanı sıra genellikle bu türdeki nesneleri sıralamak için kullanılan bazı alanlar tarafından da oluşturulur. Bir dizin için indeks, ana gösterime bağlı olarak bir kod veya adla desteklenir. Ve bir belge için indekse bir tarih eklenir. Bu indeks aynı zamanda bir bağlantıyla da desteklenmektedir.

"Dizin" seçeneğinde, oluşturulan dizin bunun için kullanılacağından dinamik bir liste, bu özniteliğe göre sıralama ile büyük hacimli bilgilerin verimli bir şekilde görüntülenmesini sağlayabilir.

Dinamik bir listedeki "Ek sıralamalı dizin" seçeneği, belirli bir özelliğin değerine göre seçim yaparak ve belirli bir nesne için ana sıralamaya karşılık gelen sıralamayla büyük miktarda bilginin etkili bir şekilde görüntülenmesini sağlayabilir. Bu durumda seçimin yapıldığı özelliği ve ana sıralama alanını içeren bir indeksin varlığı, sistemin listeyi görüntülerken indeksi kullanmasına olanak sağlayacaktır.

Elbette indeksler aynı zamanda bilgi almanın diğer yollarını da etkiler (nesne yöneticileri veya sorgu yöntemlerini kullanarak veri elde etme).

Bu nedenle Index özelliği için bir seçenek belirlerken öncelikle hangi bilgi alma seçeneklerinin optimize edilmesi gerektiğinden yola çıkmalısınız. Örneğin, ayrıntılara göre seçim içeren bir listeyi görüntülemeniz gerekiyorsa, "Ek sıralamayla dizin" seçeneğini kullanmak mantıklı olacaktır. Ve eğer indekse ihtiyaç duyulursa, örneğin, yalnızca nesneleri verilen ayrıntılara göre sıralamadan sorgulayarak aramak için, oluşturulan indeksin daha az sistem kaynağı gerektirmesi için "Dizin" seçeneğini kullanmak daha iyidir.

Çeşitli meta veri özellikleri kombinasyonları için sistem tarafından oluşturulan dizinlerin bileşimi, "Veritabanı tablolarının dizinleri" makalesinde ayrıntılı olarak açıklanmıştır.