mysql ortak sql ifadesi optimizasyon analizi

sql optimizasyon sorunu

Sql ifadesi performansı gereksinimlerinizi karşılayamaz ve yürütme verimliliği sizi dayanılmaz kılar.Genel olarak aşağıdaki durumlar vardır.

  • Ağ hızı güçlü ve dengesiz değil.
  • Sunucuda yetersiz bellek var veya SQL'e ayrılmış bellek yetersiz.
  • Mantıksız sql ifadesi tasarımı
  • Karşılık gelen dizin yok, mantıksız dizin
  • Geçerli bir dizin görünümü yok
  • Tablo verileri çok büyük ve etkili bir bölüm tasarımı yok
  • Veritabanı tasarımı çok 2, çok fazla veri yedekliliği var
  • İlgili istatistiksel bilgiler dizin sütununda eksik veya istatistiksel bilgiler güncel değil
  • ....

Peki, yavaş performansın nedenini nasıl bulacağız?

  • Öncelikle bunun sql ifadesi ile ilgili olup olmadığını bilmeniz gerekiyor, makinenin açılmadığından, sunucu donanım yapılandırmasının çok zayıf olduğundan ve ağ olmadığından emin olun p
  • Daha sonra ilgili sql yavaş ifadelerini analiz etmek için sql performans algılama aracı-sql sunucu profilleyicisini kullanın, yani yürütme süresi çok uzun, sistem kaynakları meşgul ve CPU çok fazla
  • Öyleyse bu makalenin söyleyeceği şey, sql optimizasyon yöntemleri ve teknikleri, bazı mantıksız sql ifadelerinden kaçının ve geçici optimal sql'yi seçin
  • Daha sonra kullanıp kullanmayacağınıza karar verin, makul istatistiksel bilgiler. Sql sunucusu tablodaki veri dağıtım bilgilerini otomatik olarak sayabilir ve veri durumuna göre istatistiksel bilgilerin düzenli olarak güncellenmesi gerekir.
  • Tabloda makul bir indeksin kullanıldığını doğrulayın
  • Çok fazla veriye sahip tabloların, arama aralığını daraltmak için bölümlere ayrılması gerekir

Yürütme zaman planını okuma durumunu analiz edin ve karşılaştırın

dbo'dan * seçin.

Yukarıdaki ifadenin yürütülmesi genellikle yalnızca sonucu ve çalıştırılan satırların sayısını döndürür, bu yüzden onu nasıl analiz edersiniz ve optimizasyon ile optimizasyon olmaması arasındaki farkı nasıl anlarsınız?

İşte sizin için birkaç yöntem.

1. Yürütme süresini ve cpu kullanım süresini görüntüleyin

istatistik süresini ayarla

dbo'dan * seçin.

istatistik zamanını ayarla

Açtıktan sonra mesajda görebilirsiniz.

2. I / 0'da sorgunun işleyişini görüntüleyin

istatistikleri ayarla

dbo'dan * seçin.

istatistikleri ayarla io kapalı

İnfazdan sonra

Tarama sayısı: dizin veya tablo tarama süreleri

Mantıksal okuma: veri önbelleğinde okunan sayfa sayısı

Fiziksel okuma: diskten okunan sayfa sayısı

İleriye dönük okuma: Sorgu sırasında diskten önbelleğe yerleştirilen sayfa sayısı

lob mantıksal okuma: veri önbelleğinden, görüntü, metin, ntext veya büyük veri sayfalarının sayısını okuyun

Lob fiziksel okuma: diskten, görüntü, metin, ntext veya büyük veri sayfalarının sayısını okuyun

lob önceden okuma: sorgu işlemi sırasında diskten önbelleğe alınan görüntü, metin, ntext veya büyük veri sayfalarının sayısı

Fiziksel okumaların sayısı ve ön okumaların sayısı nispeten büyükse, indeks optimizasyon için kullanılabilir.

Bu içerikleri görüntülemek için sql ifadesi komutlarını kullanmak istemiyorsanız, yöntemler de var ve size daha basit bir tane öğreteceğim.

Sormak--- > > Sorgu seçenekleri --- > > ileri

Kırmızı dairedeki 2 tarafından seçildim, efekti denemek için sql ifadesindeki set istatistiklerini io / time on / off kaldırın. Oh evet, başardın. .

3. Yürütme planını, ayrıntılı yürütme planını görüntüleyin

Sorgu ifadesini seçin ve tıklayın

Sonra mesaja bakın, aşağıdaki lejant görünecektir

sorgu resmi seçin

1. Gereksiz sütun ve satırları sorgulamadığınızdan emin olun.

  • Select * karakterinin varlığından kaçınmaya çalışın, gereksiz sütunlardan kaçınmak için * yerine belirli sütunları kullanın
  • Gereksiz satırlardan kaçınmak için sorgulanacak belirli verileri nerede sınırlandıracağınızı kullanın
  • Gereksiz satırları azaltmak için en iyi ve farklı anahtar kelimeleri kullanın

2. Farklı anahtar kelimeyi dikkatli kullanın

Ayırt, bir alanı veya birkaç alanı sorgularken kullanılır; bu, yinelenen verilerin görünmesini önler ve sorguya optimizasyon etkileri getirir.

Bununla birlikte, çok sayıda sorgu alanı varsa, sorgu verimliliği büyük ölçüde azalacaktır.

Bu şekilden analiz edin:

Açıktır ki, cpu zamanı ve doluluk süresi farklı olan ifadeden farklı olmayan ifadeden daha yüksektir. Bunun nedeni, çok sayıda alan sorgulanırken, eğer farklı kullanılıyorsa, veritabanı motorunun verileri karşılaştırması ve yinelenen verileri filtrelemesi, ancak bu karşılaştırma ve filtreleme işlemi, sistem kaynaklarını ve cpu zamanını belirsiz bir şekilde işgal edecektir.

3. Union anahtar kelimesini dikkatli kullanın

Bu anahtar kelimenin ana işlevi, her bir sorgu ifadesinin sonuç kümesini bir sonuç kümesinde birleştirmek ve size geri döndürmektir. kullanım

< ifade 1'i seçin >

Birlik

< ifade 2'yi seçin >

Birlik

< ifade 3'ü seçin >

...

Birleşmeyi karşılayan ifade aşağıdakileri karşılamalıdır: 1. Sütun sayısı aynıdır. 2. Sütun sayısına karşılık gelen veri türleri uyumlu olmalıdır.

Uygulama süreci:

Seçme ifadelerini sırayla yürütün - > > Sonuç kümesini birleştir --- > > Sonuç kümesini sıralayın ve yinelenen kayıtları filtreleyin.

dan * seçin

((orde o left join orderproduct op on o.orderNum = op.orderNum)

iç birleştirme ürünü p on op.proNum = p.productnum) burada p.id < 10000

Birlik

dan * seçin

((orde o left join orderproduct op on o.orderNum = op.orderNum)

iç birleştirme ürünü p on op.proNum = p.productnum) burada p.id < 20000 ve p.id > = 10000

Birlik

dan * seçin

((orde o left join orderproduct op on o.orderNum = op.orderNum)

iç birleştirme ürünü p on op.proNum = p.productnum) burada p.id > 20.000

---P.id buraya yazılabilir > 100 sonuç aynı çünkü filtreledik

---------------------------------- Üst ve alt cümleleri karşılaştırın ----------- ------------------------------

dan * seçin

((orde o left join orderproduct op on o.orderNum = op.orderNum)

op.proNum = p.productnum üzerinde iç birleştirme ürünü p

Bu, verimliliğin gerçekten düşük olduğunu, dolayısıyla gerektiğinde önlenmediğini gösterir. Aslında gerçekleştirdiği üçüncü kısım var: Sonuç kümesini sıralayın ve yinelenen kayıtları filtreleyin. Bunun iyi bir kuş olmadığını görebilirsiniz. Bununla birlikte, sonuç kümesi sıralanmamış ve filtrelenmemişse, açıkça verimlilik birleşiminkinden daha yüksektir, dolayısıyla sıralanmamış ve filtrelenmemiş anahtar kelimeler var mı? Cevap, evet, hepsi birleşimdir ve birleşim tümü birleşmeyi optimize etmek için kullanılabilir. .

4. Tabloda veri olup olmadığını belirleyin

üründen sayımı (*) seçin

üründen en iyi (1) kimliği seçin

Açıkçası aşağıdaki kazanır

5. Birleştirme sorgusunun optimizasyonu

Önce istediğiniz verilerin neye benzediğini bulmanız ve ardından hangi bağlantının kullanılacağına karar vermeniz gerekir ki bu çok önemlidir.

Çeşitli bağlantıların değerleri şunlardır:

  • İç birleştirme sonuç kümesinin boyutu, koşulları karşılayan sol ve sağ tabloların sayısına bağlıdır.
  • Sol birleşim, sol tablonun boyutuna bağlıdır, sağ ise tam tersidir.
  • Tam bağlantı ve çapraz bağlantı, sol ve sağ tablolardaki toplam veri miktarına bağlıdır

dan * seçin

((OrderId'nin > 10000) o sol birleşik orderproduct op on o.orderNum = op.orderNum)

dan * seçin

(orde o sol join orderproduct op on o.orderNum = op.orderNum)

nerede o.OrderId > 10000

Bu, bağlantı tablosundaki veri miktarını azaltmanın verimliliği artırabileceğini gösterir.

sonuç olarak

Optimizasyon, en önemli şey, genellikle ifadeler, veritabanı alışkanlıkları ve yöntemler tasarlamanızdır. Eğer umursamıyorsanız, sabırla analiz etmeniz gerekir, ancak analiz süreci anlayışınıza, ihtiyaçlarınıza ve bilgi seviyenize bağlıdır.

DBA hakkında daha fazlasını daha sonra paylaşacağım ve ilgilenen arkadaşlar buna dikkat edebilir ~

Piyasada doğrudan Audi A8L'yi vurdu: "epik teknoloji terminali" kendi kendini yetiştirme
önceki
"Creation Camp" tema şarkısı C aslında Lu Dinghao'yu vurdu ve temelde çıkışını kaçırdı
Sonraki
PLC hakkındaki bu bilgi, bilmeniz gereken şey! PLC'yi tekrar öğrenmek, daha azıyla daha fazlasını yapacak
İOS11'in genel beta sürümü burada, yükseltmek istiyorsanız lütfen dikkatli olun!
Lu Benwei'nin kız arkadaşı ateşli bir vücuda sahip ve onu izledikten sonra burnunun kanamasını durduramıyor. Yorulduktan sonra hayatta kalmak için güçlü bir arzusu var gibi görünüyor!
Siemens Portal tartım programlama en basit yöntem olabilir, ne diyeceğimi bilmiyorum
Altı ayda hemoroide hamile kaldı ve doktor ona merhem sürdü ve bebek gitti!
İPhone 8'den daha önemli olan yeni ürünler? Apple akıllı gözlükler yakında geliyor!
Dayanamıyorum! Mobike acilen açıklığa kavuşturdu: 6 milyar mevduatın kötüye kullanılması tamamen söylentidir, kullanıcılar istedikleri zaman geri dönebilirler
Su Da'nın 12 versiyonu detaylı bir şekilde karşılaştırıldı, herkes bu rolü iyi oynayamaz, son versiyonu mükemmel!
Siemens S7-300 tartım programlamasını biliyor musunuz? Büyük fabrikalar için sahip olunması gereken, 5 dakikada öğrenilen
Cep telefonu verileri neden her zaman yetersizdir ve gerçek nedir?
W699'dan W2017'ye Samsung'un ileri teknoloji cep telefonlarının gözden geçirilmesi
Zhang Ziyi ilk kez prodüksiyon fotoğraflarını yayınladı ve netizenlerin yorumlarını okuduktan sonra ünlüler ile sıradan insanlar arasında çok büyük bir boşluk olduğunu öğrendi.
To Top