Eğer masada çok sayıda dizin varsa nasıl öğrenmek için?

5 Cevap php

Ben MySQL masada çok fazla dizin olup olmadığını nasıl öğrenebilirim?

Oldukça erişilmesi gereken bazı tabloların için, ben çok erişilebilir olacak sütunlar üzerinde yaklaşık 2-4 dizinleri ekledik. Ama onlar yarardan çok zarar yapıyoruz nasıl öğrenebilirim?

5 Cevap

Bu sorunun elemanları vardır:

  1. Indekslerinizin kullanılıyor?
  2. Indekslerinizin performansını gelişiyordu

Bu cevaplama sorguları üzerinde olması kontrolüne bağlıdır. Eğer bir web uygulaması var varsayarsak, muhtemelen değilse, neler olup bittiğini görmek için bir süre sorgu günlüğünü etkinleştirmek içeri geliyor sorguları oldukça iyi bir fikrim var.

Sonraki endeksler onları karşılamak için kullanılan ediliyor, bu sorguların her açıklamak ve almak not çalıştırın. Herhangi kullanılmayan giderseniz, o zaman muhtemelen uzay ve INSERT cezası tasarruf onları kaldırmanız gerekir.

Sonra, indeksler yardım olup olmadığını görmek gerekir. Kıyaslama en doğru yöntemdir, ancak veritabanı çoğaltma değil, canlı üretim kopya bunu yapmak isteyebilirsiniz.

Eğer ekler ve güncellemeleri yavaş olup olmadığını söylemek için bir yoludur.

Indeksleri tablo değişiklikleri veri olarak muhafaza edilmesi gerektiğini söyledi gibi indeksleri ile bir tablo güncelleme olduğunda sadece performans vurur geldiğini unutmayın. Eğer sadece bir tablodan seçiyorsanız, indeksler genellikle sadece performansını artırmak ve onu aşağılamak olamaz. Açıkçası, onlar gereksiz disk alanı israf ve zaman içinde yeniden tablo değişiklikleri olarak muhafaza edilmesi gerekir gibi herhangi bir un kullanılan endeksler masanızı kurtulmak isteyeceksiniz.

Genellikle indeksleri aslında sorgulara dayalı kullanılan hangi görmek için yürütme planları kontrol etmek isteyeceksiniz. Doğru sonuçlar için bu yapmadan önce istatistikleri toplamak emin olun. Yürütme planı bu denetimi yaparken önemli olan, b / bir sütun üzerinde bir dizin olsa bile, iyileştirici (tür sorguları oldukça seçici olan büyük tablolar üzerinde sütun vb kardinalite faktörlere dayanarak bunu tercih edebilir c yani 1M kullanıcımız var ve sorgu nerede userid = 'x' 1 satır dönecektir hangi) sensin, select endeksi bulmak için gidiyoruz bakım maliyeti değer. Küçük tablolar, kıta isimleri bir tablo, genellikle tam tablo taraması bir dizin tarama tercih edilecek bir dizinden kadar birçok kez fayda vermez söylüyorlar. Bu endeksi okumak için daha fazla maliyet ve sonra sadece doğrudan verinin küçük bir miktar okuma aksine endeksine göre başvurulan veri bloğu okuyacak olmasından kaynaklanmaktadır. Yine, bunlar özel tabloları ve ihtiyaçlarına göre doğrulanmış olması, ve tüm yürütme planları bakarak bitti gerekir.

Lütfen sorguları sorguları bu tür kendilerini katmaktadır eğer tek sütun indeksleri üzerinden Zincirleme dizinleri lehine. Örneğin, eğer senin cümlecikleri genellikle böyle bir şey yapmak "emp_fname = 'Jim' ve emp_lname = 'smith', her kolon üzerinde fname ve lname yerine bireysel endeksleri üzerinde birleştirilmiş bir dizin oluşturabilirsiniz nerede.

Çok dizinleri sahip tehlikesi, indeksler yeniden hesaplanması gerekir çünkü ekler / güncellemeler / siler yavaşlatabilir olmasıdır. Eklerin Benchmark performans / / güncellendi siler. Eğer indeksleri ile önemli ölçülebilir performans düşüşü görmüyorsanız, onları yalnız bırakmak.

Iki teknik vardır.

  1. En sık sorguları için sorgu yürütme planları alın. Kullanılan endeksler off kontrol edin. Tüm diğer endeksler - sorgu yürütme planları görünmüyor - kullanılmaktadır değildir.

  2. Seçilen sorguları performansını ölçün. Bir dizin açılır. Tekrar performansını ölçmek ve kötü ya da var olmadığını görmek.

Sen Ekle ve Update aktivitenin yanı sıra Seç aktivite düşünmek gerekir. Indeksler hızlı seçmek yapmak, ama yavaş yerleştirin.

Sadece okumak ya da bir işlem ölçmez. Bu indeksler değerini belirlemek işlemlerin genel karışımı bulunuyor.

Bazı durumlarda, bir ekleme yapmak için bazı indeksler bırakarak, ve sonra onları yeniden düşünebilirsiniz.