SQL'de dizin nedir ? Açıkça anlamak için açıklayabilir veya referans verebilir misiniz?
Bir dizini nerede kullanmalıyım?
SQL'de dizin nedir ? Açıkça anlamak için açıklayabilir veya referans verebilir misiniz?
Bir dizini nerede kullanmalıyım?
Yanıtlar:
Veritabanında aramayı hızlandırmak için bir dizin kullanılır. MySQL'in konuyla ilgili bazı iyi belgeleri vardır (diğer SQL sunucuları için de geçerlidir): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Bir dizin, sorgunuzdaki bazı sütunlarla eşleşen tüm satırları verimli bir şekilde bulmak ve ardından tam eşleşmeleri bulmak için tablonun yalnızca bu alt kümesinde gezinmek için kullanılabilir. Cümlede herhangi bir sütunda dizinleriniz yoksa WHERE
, SQL
sunucunun tüm tablodan geçmesi ve eşleşip eşleşmediğini görmek için her satırı kontrol etmesi gerekir, bu da büyük tablolarda yavaş bir işlem olabilir.
Dizin de bir UNIQUE
dizin olabilir, yani bu sütunda yinelenen değerlere sahip olamayacağınız veya PRIMARY KEY
bazı depolama motorlarında değerin saklandığı veritabanı dosyasında nerede olduğunu tanımlayabilirsiniz.
MySQL'de , sorgunuzun herhangi bir dizini kullanıp kullanmayacağını görmek için ifadenizin EXPLAIN
önünde SELECT
kullanabilirsiniz. Bu, performans sorunlarını gidermek için iyi bir başlangıçtır. Daha fazla bilgiyi buradan edinebilirsiniz:
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Kümelenmiş dizin telefon rehberinin içeriğine benzer. Kitabı 'Hilditch, David' adresinde açabilir ve 'Hilditch'in hemen yanındaki tüm bilgileri yan yana bulabilirsiniz. Kümelenmiş dizinin anahtarları şunlardır (soyadı, adı).
Bu, kümelenmiş dizinleri, tüm veriler yan yana bulunduğundan aralık tabanlı sorgulara dayanan çok sayıda veri almak için harika hale getirir.
Kümelenmiş dizin aslında verilerin nasıl depolandığıyla ilgili olduğundan, tablo başına bunlardan yalnızca biri mümkündür (ancak birden çok kümelenmiş dizini simüle etmek için hile yapabilirsiniz).
Kümelenmemiş bir dizin, çoğuna sahip olabileceğiniz için farklıdır ve daha sonra kümelenmiş dizindeki verilere işaret eder. Anahtarlanmış bir telefon rehberinin arkasında (şehir, adres) örneğin kümelenmemiş bir dizininiz olabilir.
Telefon defterinde 'Londra'da yaşayan tüm insanları aramak zorunda kaldığınızı düşünün - sadece kümelenmiş dizinle, kümelenmiş dizindeki anahtar açık olduğundan (soyadı, ad) ve sonuç olarak Londra'da yaşayan insanlar endeks boyunca rastgele dağılmıştır.
(Şehir) üzerinde kümelenmemiş bir dizininiz varsa, bu sorgular çok daha hızlı gerçekleştirilebilir.
Umarım yardımcı olur!
Çok iyi bir benzetme, veritabanı dizinini bir kitaptaki dizin olarak düşünmektir. Ülkelerle ilgili bir kitabınız varsa ve Hindistan'ı arıyorsanız, neden veritabanı terminolojisinde tam bir masa taramasının eşdeğeri olan kitabın tamamını çevirmek istersiniz - Hindistan hakkında bilgi bulabileceğiniz tam sayfaları anlatacak. Benzer şekilde, bir kitap dizini bir sayfa numarası içerdiğinden, bir veritabanı dizini, SQL'inizde aradığınız değeri içeren satıra bir işaretçi içerir.
Sorguların performansını hızlandırmak için bir dizin kullanılır. Bunu, ziyaret edilmesi / taranması gereken veritabanı veri sayfalarının sayısını azaltarak yapar.
SQL Server'da, kümelenmiş bir dizin bir tablodaki verilerin fiziksel sırasını belirler. Tablo başına yalnızca bir kümelenmiş dizin olabilir (kümelenmiş dizin tablodur). Bir tablodaki diğer tüm dizinler kümelenmemiş olarak adlandırılır.
Dizinler, verileri hızlı bir şekilde bulmakla ilgilidir .
Veritabanındaki dizinler, bir kitapta bulduğunuz dizinlere benzer. Bir kitabın bir dizini varsa ve sizden o kitapta bir bölüm bulmanızı rica ediyorum, bunu dizinin yardımıyla hızlı bir şekilde bulabilirsiniz. Diğer yandan, kitabın bir dizini yoksa, kitabın başından sonuna kadar her sayfaya bakarak bölümü aramak için daha fazla zaman harcamanız gerekecektir.
Benzer şekilde, veritabanındaki dizinler sorguların verileri hızlı bir şekilde bulmasına yardımcı olabilir. Dizinlerde yeniyseniz, aşağıdaki videolar çok yararlı olabilir. Aslında onlardan çok şey öğrendim.
Dizin Temelleri
Kümelenmiş ve Kümelenmemiş Dizinler
Benzersiz ve Benzersiz Olmayan Dizinler Dizinlerin
avantajları ve dezavantajları
Genel olarak endeks bir B-tree
. İki tür dizin vardır: kümelenmiş ve kümelenmemiş.
Kümelenmiş dizin, satırların fiziksel bir sırasını oluşturur (yalnızca bir olabilir ve çoğu durumda birincil anahtardır - tabloda birincil anahtar oluşturursanız, bu tabloda da kümelenmiş dizin oluşturursunuz).
Kümelenmemiş dizin de bir ikili ağaçtır, ancak fiziksel bir satır sırası oluşturmaz. Kümelenmemiş dizinin yaprak düğümleri PK (varsa) veya satır dizini içerir.
Dizinler arama hızını artırmak için kullanılır. Çünkü karmaşıklık O'dur (log N). Dizinler çok büyük ve ilginç bir konudur. Büyük veritabanında dizin oluşturmanın bazen bir tür sanat olduğunu söyleyebilirim.
Öncelikle sorgunun normal (indeksleme olmadan) nasıl çalıştığını anlamamız gerekir. Temelde her satırı teker teker gezer ve verileri bulduğunda geri döner. Aşağıdaki resme bakın. (Bu resim bu videodan alınmıştır .)
Diyelim ki sorgu 50 bulmak, 49 kayıt doğrusal bir arama olarak okumak zorunda kalacak.
Aşağıdaki resme bakın. (Bu resim bu videodan alınmıştır )
Dizin oluşturmayı uyguladığımızda, sorgu, her bir geçişteki verilerin yarısını bir ikili arama gibi ortadan kaldırarak her birini okumadan verileri hızlı bir şekilde bulur. MySQL dizinleri, tüm verilerin yaprak düğümünde olduğu B-ağacı olarak saklanır.
INDEX, veri alma işlemini hızlandıran bir performans optimizasyon tekniğidir. Bu tablodan (veya Görünüm) veri alınırken performansı artırmak amacıyla bir Tablo (veya Görünüm) ile ilişkilendirilen kalıcı bir veri yapısıdır.
Dizin tabanlı arama, özellikle sorgularınız WHERE filtresi içeriyorsa uygulanır. Aksi takdirde, yani, WHERE filtresi olmayan bir sorgu tüm verileri ve işlemi seçer. INDEX olmadan tüm tabloyu aramaya Tablo taraması denir.
Sql-Index için kesin bilgileri açık ve güvenilir bir şekilde bulacaksınız: bu bağlantıları takip edin:
Bir dizin birkaç farklı nedenden dolayı kullanılır. Bunun ana nedeni, satırları alabilmek veya satırları daha hızlı sıralayabilmek için sorgulamayı hızlandırmaktır. Başka bir neden, başka hiçbir sütunun aynı değerlere sahip olmadığını garanti edecek bir birincil anahtar veya benzersiz bir dizin tanımlamaktır.
SQL Server kullanıyorsanız, en iyi kaynaklardan biri, yükleme ile birlikte gelen kendi Çevrimiçi Kitaplarıdır! Herhangi bir SQL Server ile ilgili konular için başvuracağım ilk yer.
Pratik ise "bunu nasıl yapmalıyım?" sorularınız varsa, StackOverflow sormak için daha iyi bir yer olacaktır.
Ayrıca, bir süredir geri gelmedim ama sqlservercentral.com en iyi SQL Server ile ilgili sitelerden biriydi.
Dizin bir on-disk structure associated with a table or view that speeds retrieval of rows from the table or view
. Dizin, tablo veya görünümdeki bir veya daha fazla sütundan oluşturulmuş anahtarlar içerir. Bu anahtarlar, SQL Server'ın anahtar değerleriyle ilişkili satırı veya satırları hızlı ve verimli bir şekilde bulmasını sağlayan bir yapıda (B ağacı) saklanır.
Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.
Bir PRIMARY KEY yapılandırırsanız, kümelenmiş bir dizin yoksa Veritabanı Altyapısı otomatik olarak kümelenmiş bir dizin oluşturur. Varolan bir tabloda bir PRIMARY KEY kısıtlamasını zorlamaya çalıştığınızda ve bu tabloda zaten kümelenmiş bir dizin varsa, SQL Server kümelenmemiş bir dizin kullanarak birincil anahtarı zorlar.
Dizinler (kümelenmiş ve kümelenmemiş) hakkında daha fazla bilgi için lütfen buna bakın: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described?view= sql-server-ver15
Bu yardımcı olur umarım!