MSSQL ile SQL sorgu performansını artırın. Bu bilgilendirici kılavuzda sorgularınızı verimlilik ve hız için nasıl optimize edeceğinizi öğrenin.
Optimize edilmemiş Microsoft SQL Server (MSSQL) SQL sorguları, vasatın altında performansa, aşırı kaynak kullanımına, tutarsız verilere, güvenlik açıklarına ve bakım güçlüklerine neden olabilir. Bu sorunlar, programınızın işlevselliğini, güvenilirliğini ve güvenliğini etkileyerek kullanıcıları hayal kırıklığına uğratabilir ve size daha fazla paraya mal olabilir.
MSSQL'de SQL sorgularını optimize etmek, verimli ve hızlı performans elde etmek için çok önemlidir. İndeksleme, sorgu basitleştirme ve saklama prosedürleri gibi teknikleri uygulayarak, kullanıcılar sorgu performansını ve veri değiştirme performansını dengeleyerek sonuçta genel veritabanını iyileştirir verim.
İndeksleme Yoluyla Sorgu Optimizasyonu
Veritabanı indeksleme aramayı daha hızlı ve daha verimli hale getirmek için veritabanı tablolarındaki verileri düzenler ve sıralar. İndeksleme, tablolardaki verilerin kopyalarını oluşturur ve bunları sıralar;
veritabanı motoru kolayca gezinebilirler.Sorgu yürütme sırasında, veritabanı motoru gerekli verileri bulmak için dizini kullanır ve sonuçları hızlı bir şekilde döndürür, böylece sorgu yürütme süresini hızlandırır. İndeksleme olmadan, gerekli verileri bulmak için veritabanı motorunun tablodaki tüm satırları taraması gerekir ve bu, özellikle büyük tablolar için zaman ve kaynak açısından yoğun olabilir.
MSSQL'de Dizin Oluşturma
İlişkisel veritabanlarında bir dizin oluşturmak kolaydır ve MSSQL gözden kaçmaz. kullanabilirsiniz DİZİN OLUŞTUR MSSQL'de bir dizin oluşturmak için ifade.
YARATMAKDİZİN dizin_adı
ON tablo_adı (sütun1, sütun2, ...);
Yukarıdaki SQL kodunda, dizin_adı endeksin adıdır, Tablo ismi tablonun adıdır ve sütun1, sütun2, vb. dizinlenecek sütunların adlarıdır.
Kümelenmemiş bir dizini şu şekilde oluşturabilirsiniz: Müşteriler masa Soy isim bir SQL deyimi içeren sütun.
YARATMAK KÜMELENMEMİŞ DİZİN IX_Customers_LastName
AÇIK Müşteriler (Soyadı);
İfade, adında kümelenmemiş bir dizin oluşturur. IX_Customers_LastName üzerinde Soy isim sütunu Müşteriler masa.
Endeksleme Maliyeti
İndeksleme, sorgu performansını önemli ölçüde iyileştirebilse de bunun bir bedeli vardır. Dizin oluşturma, dizini depolamak için ek disk alanı gerektirir ve dizin oluşturma işlemleri, eklemeler, güncellemeler ve silmeler gibi veri değiştirme işlemlerini yavaşlatabilir. Veri değişikliğinde dizini güncellemeniz gerekir ve güncelleme işlemi büyük tablolar için zaman alıcı olabilir.
Bu nedenle, sorgu performansını ve veri değiştirme performansını dengelemek önemlidir. İndeksleri yalnızca sık arayacağınız sütunlar üzerinde oluşturmalısınız. Dizin kaynak kullanımını düzenli olarak izlemek ve gereksiz dizinleri kaldırmak da önemlidir.
Sorgu Basitleştirme Yoluyla Sorgu Optimizasyonu
Veri analizi için, karmaşık sorgular veri çıkarma için kullanışlıdır. Ancak, karmaşık sorguların performans üzerinde etkisi vardır ve verimsiz veri çıkarmayla sonuçlanabilir.
Sorguları basitleştirme, daha hızlı, daha az kaynak yoğun işleme için karmaşık sorguları daha küçük, daha basit sorgulara ayırmayı içerir.
Sorgu basitleştirme, performansı artırır ve karmaşık sorguları daha basit sorgulara bölerek veri ayıklamayı kolaylaştırır, çünkü karmaşık sorgular sistemde darboğazlara neden olabilir. Anlaşılmaları zordur, bu da geliştiricilerin ve analistlerin sorunları gidermesini veya optimizasyon alanlarını belirlemesini zorlaştırır.
Burada, amacın verilerdeki eğilimleri ve kalıpları belirlemek olduğu bir müşteri siparişleri tablosu için MSSQL üzerinde çalışan karmaşık bir sorgu örneği verilmiştir:
SEÇME
müşteri adı,
COUNT(order_id) AS total_orders,
AVG(sipariş_amount) AS ortalama_sipariş_amount,
SUM(sipariş_amount) AS total_sales
İTİBAREN
emirler
NEREDE
order_date '2022-01-01' VE '2022-12-31' ARASINDA
AND order_status = 'tamamlandı'
GRUPLANDIRMAYA GÖRE
müşteri adı
SAHİP OLMAK
SAYI(sipariş_kimliği) > 5
TARAFINDAN SİPARİŞ
total_sales AÇIKLAMA;
Sorgu, 2022'de tamamlanan siparişlerdeki müşteri adlarını ve satış bilgilerini arar ve beşten az siparişi olan müşterileri toplam satışa göre azalan düzende filtreler.
Sorgu, değerli içgörüler sağlayabilir, ancak karmaşıktır ve özellikle şu durumlarda işlenmesi daha uzun sürer: emirler tablonun birçok girişi var.
Sorguyu teker teker yürütülen daha küçük sorgulara bölerek basitleştirebilirsiniz.
-- Müşteri adlarının bir listesini ve verdikleri toplam sipariş sayısını alın
SEÇME
müşteri adı,
COUNT(order_id) AS total_orders
İTİBAREN
emirler
NEREDE
order_date '2022-01-01' VE '2022-12-31' ARASINDA
AND order_status = 'tamamlandı'
GRUPLANDIRMAYA GÖRE
müşteri adı
SAHİP OLMAK
SAYI(sipariş_kimliği) > 5;-- Her müşteri için ortalama sipariş miktarını öğrenin
SEÇME
müşteri adı,
AVG(sipariş_amount) AS ortalama_sipariş_amount
İTİBAREN
emirler
NEREDE
order_date '2022-01-01' VE '2022-12-31' ARASINDA
AND order_status = 'tamamlandı'
GRUPLANDIRMAYA GÖRE
müşteri adı
SAHİP OLMAK
SAYI(sipariş_kimliği) > 5;
-- Her müşteri için toplam satışı alın
SEÇME
müşteri adı,
SUM(sipariş_amount) AS total_sales
İTİBAREN
emirler
NEREDE
order_date '2022-01-01' VE '2022-12-31' ARASINDA
AND order_status = 'tamamlandı'
GRUPLANDIRMAYA GÖRE
müşteri adı
SAHİP OLMAK
SAYI(sipariş_kimliği) > 5
TARAFINDAN SİPARİŞ
total_sales AÇIKLAMA;
Bu basitleştirilmiş yaklaşım, her müşteri için müşteri adlarını ve toplam siparişleri, ortalama sipariş miktarlarını ve toplam satışları alma görevlerini ayrı ayrı sorgulara ayırır. Her sorgunun belirli amaçları vardır ve belirli görevler için optimize edilmiştir, bu da veritabanının istek üzerine işlenmesini kolaylaştırır.
Sorgu Basitleştirme İpuçları
Sorguları basitleştirirken, belirli bir görev için optimize edilmiş sorgular oluşturmak üzere her seferinde bir göreve odaklanmak önemlidir. Tek bir göreve odaklanmak, performansı önemli ölçüde artırmaya yardımcı olabilir.
Ayrıca, kodun anlaşılmasını ve korunmasını kolaylaştırmak için iyi adlandırma kuralları kullanmak önemlidir. Sistemdeki potansiyel sorunları ve iyileştirme alanlarını kolayca belirleyebilirsiniz.
Saklı Yordamlar Yoluyla Sorgu Optimizasyonu
saklı yordamlar bir veritabanında saklanan önceden yazılmış SQL ifadeleri kümesidir. Saklı yordamları, güncellemeden veritabanına veri eklemeye veya veritabanından veri almaya kadar çeşitli işlemleri gerçekleştirmek için kullanabilirsiniz. Saklı yordamlar parametreleri kabul edebilir. Onları farklı programlama dillerinden arayabilirsiniz, bu da onları uygulama geliştirme için güçlü bir araç haline getirir.
Bir departmandaki çalışanların ortalama maaşını veren MSSQL için bir saklı yordam oluşturmaya ilişkin bir örneği burada bulabilirsiniz:
YARATMAKPROSEDÜR [dbo].[GetAverageMaaş]
@DepartmentName VARCHAR(50)
GİBİ
BAŞLAMAK
SEÇMEortalama(Maaş) gibi Ortalama maaş
ÇALIŞANLARDAN
NEREDE Departman = @DepartmentName
SON
Saklı yordamda, adlı bir parametre tanımladınız. @Bölüm Adı ve kullandı NEREDE Sonuçları departmana göre filtrelemek için madde. sen de kullandın ortalama departmandaki çalışanların ortalama maaşını hesaplamak için işlev.
Saklı yordamları MSSQL ile yürütebilirsiniz. YÖNETİCİ ifade.
Yukarıdaki saklı yordamı şu şekilde uygulayabilirsiniz:
YÖNETİCİ [dbo].[GetAverageSalary] @DepartmentName = 'Satış'
Saklı yordam yürütme deyiminde, Satış departman adı olarak değer. Açıklama, satış departmanındaki ortalama çalışan maaşını iade edecektir.
Saklı Yordamlar Sorgu Performansını Nasıl Artırır?
Saklı yordamlar, sorgu performansını önemli ölçüde artırabilir. İlk olarak, saklı yordamlar, verileri aktarmak yerine sunucu tarafında SQL deyimlerini yürüterek ağ trafiğini azaltır. İstemci ve sunucu arasında gidip gelmek, böylece ağ üzerinden gönderilen veri miktarını azaltmak ve sorgu yanıtını azaltmak zaman.
İkinci olarak, yürütme planının bellekte saklanması anlamına gelen saklı önbelleğe alma prosedürlerini derleyebilirsiniz. Saklı yordamı çağırdığınızda, sunucu yürütme planını yeniden derlemek yerine bellekten alır. SQL deyimleri, böylece saklı yordam için yürütme süresini azaltır ve sorguyu iyileştirir verim.
Ubuntu'da MSSQL Kurabilirsiniz
MSSQL, Ubuntu ve diğer Linux dağıtımlarını desteklemede önemli adımlar attı. Microsoft, kuruluşta Linux'un artan popülaritesini fark etti ve amiral gemisi veritabanı sunucusunun kullanılabilirliğini Linux platformlarını da kapsayacak şekilde genişletmeye karar verdi.