9 Eylül Çarşamba ´09
MySQL'de Procedure Analyse fonksiyonu ile tablo yapınıza ait betimsel istatistikler ve alanlara ait veri türü önerisi elde edebilirsiniz. Bu sayede içi dolu olan bir tablonuzun yapısını optimize ederken kaydedilen veri hakkında fikir sahibi olabilirsiniz.

Procedure Analyse, çıktı olarak tablonuzdaki her alana ait minimum, maksimum, içindeki veri boyutlarının alt ve üst sınırlarını, ortalama standart sapma ve en önemlisi, o ana kadar kaydedilmiş verilerin profiline göre o alanın en ideal hangi türde olması gerektiğine dair öneri veriyor.

Sonuçta nümerik alanlarda ortalama, standart sapma, minimum maksimim değerleri düşünerek veri boyutunuzu saptayabilirsiniz. Aynı durum varchar alanlarda da geçerli. Çoğu zaman select sorguları gereksiz yere büyük açılmış alan türlerinden ve indeks oluşturulmamış basit alanlardan dolayı oldukça uzun sürelerde sonuç veriyor. Hatta bazen zaman aşımına uğruyor.

MySQL'de Procedure Analyse hakkında bilgi almak için
taze yazdığım şu dökümanı inceleyebilirsiniz :

MySQL'de Procedure Analyse ile optimizasyon analizi
MySQL'de büyük veri taşıyacak tablolar ürettiğinizde bazen indeksleri doğru seçemeyebiliyor, alan türlerini iyi belirleyemiyoruz. Gözden kaçan şeyler olabiliyor veya bilmediğimiz alan türleri ile çalışıyor olabiliriz.

Veri boyutu büyüdükçe sistemdeki sorgu süreleri büyüyebiliyor. Hatta bu optimizasyonu iyi yapmazsanız aslında 1 saniyeyi geçmeyecek sorgular için dakikalar harcayabilir, kodunuz zaman aşımına uğrayabilir (timeout).

Optimizasyon konusunda çeşitli teknikler var tabiki. Bu dökümanda basitçe tek sorgu ile mysql'in yapı analizi çıktısı almayı ve oradaki önerileri değerlendirmeyi anlatacağım.

Bir tablonun yapısını öğrenmek için
DESCRIBE `forum`
sql kodunu kullanarak tablo yapısını öğrenebiliriz. Çıktı olarak her alanın adını, türünü, null olup olmadığı, indeks türü gibi değerler döner. Kaç alanınız var ise o kadar satır çıktı alırsınız.

MySQL'deki Procedure Anlayse fonksiyonu ile bu alanların bazı betimsel istatistiklerini ve önerilen türünü öğrenebilirsiniz. Bunun için de
SELECT * FROM `forum` PROCEDURE ANALYSE ();
kodunu çalıştırmanız yeterlidir. Bu kod çıktı olarak kaç tane alanınız var ise o kadar kayıt dönecektir. Bu kayıtlar şu bilgilere sahip olur :
Field_name                 Alanın adı
Min_value                  Tablodaki değerler içinde kayıtlı olan minimum değer
Max_value                  Tablodaki değerler içinde kayıtlı olan maksimum değer
Min_length                 Veri boyutu olarak en küçük boyut
Max_length                 Veri boyutu olarak en büyük boyut
Empties_or_zeros           Boş (null) veya 0 değerine sahip satır varsa sayısı
Nulls                      Null yani boş içeriğe sahip satır sayısı
Avg_value_or_avg_length    Aldığı değerlerin ortalaması (nümerik alanlar için)
Std                        Değerlerin standart sapması
Optimal_fieldtype          Burada mysql'in bu alan için size önerdiği veri türü olur 
Burada dikkat edeceğiniz şey, alan boyutlarının alt ve üst değerleri. Yani mesela siz varchar(200) lük bir alan ürettiniz. Ve tablonuz verilerle doldu, bu analize bakınca o alan için Min_length 10 Max da 50 diyorsa sizin alan boyutunuzu 70-80 gibi bir boyuta düşürmeniz daha az bellek harcamasını sağlar. Yani 200 olarak düşündüğünüz alan uygulamada, yani gerçekte o boyuta ulaşmamış ve daha ufak kalmış.

Benzer konu nümerik alanlar için de geçerli. Yani sizin teorik/ideal olarak düşündüğünüz veri boyutu bazen büyük gelebilir. Bu noktada alan türü ve boyutunu değiştirerek select gibi sorguları daha hızlı hale getirebilirsiniz.

Index atama konusunda da bu geçerli, eğer select'lerde çok kullandığınız ve where kalıplarına sürekli soktuğunuz bir alanınızın standart sapması ufak ise (yani birbirinden çok farklı değerler almıyorsa - ama tekil ise) o alana bir indeks atayarak sorgu işletim zamanını oldukça kısaltabilirisiniz.

Burada bir güzel şey de, mesela sadece gruplama amacı ile bir alanı varchar(30) yapıp içine "anket", "forum", "dokuman" gibi 3 değer atıyorsunuz. Tabiki projeyi tasarlarken bunun farkında olmazsınız ve "Ya burada her türlü şeyi tanımlarım" diye düşünürken projeye bu üçü dışında başka şey gelmediğini farkettiğinizde bu analiz çıktısında zaten mysql size veri türünü ENUM("anket", "forum", "dokuman") olarak ayarlamanızı önerecektir.

Bu çıktıyı sadece optimizasyon değil, log tuttuğunuz bazı tablolardaki basit istatistiksel çıkarımlarla veri hakkında fikir edinmek için de kullanabilirsiniz. Zira ortalama, standart sapmay veriyor olması o verinin dağılımı konusunda size oldukça fazla fikir verebilir.

Hazırlayan : Mehmet Fatih YILDIZ

Popüler Etiketler

php apache apple server örnek kod logo html5 html sql mysql export tool macosx app kitap ui design development social ie css3 support browser twitter jquery javascript widget spam wanda proje kampanya istatistik insanlar ubuntu cache player license lisans mail newsletter subscription api ios itunes mobile banner linux konsol calendar media pharma hack wordpress css form radio style less bootstrap optimizasyon analyse procedure regex url svn subversion sosyal integration service network blog iphone ipad app store store in-app purchase purchase verification storekit itunes connect www subdomain redirect crossdomain gimp howto nasıl ajax xml http iOS js notebook laptop open source workspace startups ide editor phpstorm jetbrains deployment version control git while session cookie terminal pear mdb2 prepare execute mssql pgsql sitemap generator google statistics facebook opengraph fql optimization htaccess route router mod_rewrite signature imza mootools xmlhttprequest language rss injection search table wireless developer graph share link plugin auth chart osx applications free assets lifestream parse digital medya login ux icons date tarih job webkit web app music tebrik db database seo internet explorer diff zaman windows fstab ntfs firefox download coding dokuman oyun ipucu nedir browsers doritos tytz internet textarea object query input button portfolio kontrol yapıları if meta mfyz ruffles compile compiler on-the-fly framework cms icon ikon grafik xhtml screen kurulum code select switch connect box