MYSQL index eklemek veritabanın yükünü hafıfletmek ve mysql ram kullanımına biraz olsun engel olmak
Yeni bir makale ile sizlere mysql için bazı çözümler sunmaya çalışacağım
Mysql veritabanı bilindiği üzere fazladan ram tüketiyor MSSQL ise takiplerim doğrultusunda işlemci MYSQL veritabanı için aslında bir çözüm var indexleme olayı.
Nedir ne işe yarar konusuna gelince hemen detaylarını açıklayalım ve kulanan arkadaşlara yardımcı olalım
index olayı tablolarda yaptığı bir düzenleme sayesinde tablodaki verileri alfabetik sıraya dizerek arama yada sorgulama sonucu mysql nin daha kolay erişimini saglıyor
Bidiğiniz gibi tabloda veriler idnum (otomatiksayı) ile sıralanıyor ve eger biz id numarasına değilde baska bir alanda sorgulama yaparsak Mysql o veriyi bulana kadar arıyor ve sonucu döndürüyor ve istenilen sonuç en son sıra yada sayı ise ozaman tüm verileri gözden geçiriyor buda kasılmasına neden oluyor
Set rs = Member.Execute("Select * from uyeler where id = '43'") şeklindeki bir sorgu id numarasında arama yaptığı için sorun olmuyor tabiki çünkü id numarası mysql de zaten alfabetik sıralama ile listelenmiş durumda.
Ancak Set rs = Member.Execute("Select * from uyeler where kulladi = 'memisibram'") şeklindeki sorgu sorun yaratıyor çünkü bu sorguda aranan kullanıcı adı tablodaki sıralamaya göre 48000 ci veri olabilir ve Mysql bu veriye ulaşana kadar arama yapar bunun sonucuda bize siteyi kasma Ram tüketme v.s gibi istenmeyen olaylara sebep olur
indexlersek ne olacak sorusuna gelince indexleme yapılan bir tabloda kulladi alanını indexlersek Mysql bu alanıda kendi içinde alfabetik sırada tutar ve sorgulama sonucunda bu alana index verildiyse alfabetik sırada tuttuğu bu alandan bakar sorgusuna ve veriyi hemen bulur bu işlem normal sorgulamaya göre daha hızlıdır
Otomatik id alanları ve longtext alanları indexlenemez indexleme aşağıdaki gibi yapılır
ALTER TABLE Tabloadi ADD INDEX indexadi (sutun1,sutun2,sutun3);
bu şekilde veritabanına indexadı adında index oluşur ve bundan sonra sutun1,sutun2,sutun3 alanları alfabetik sıralama ile listelenir sorgulamalarda artık Mysql daha kolay çalışır
İndexi kaldırmak için ALTER TABLE Tabloadi DROP INDEX indexadi ; şeklinde bir sorgu çalıştırmamız yeterlidir verilen index adında kaç sütün indexlediysek onları kaldırır
7583 Konu 27653 Cevap ve 41500 Üyesi olan aspsitem veritabanı ile localhostta yaptığım denemede forumdaki çok cevap alan bir konunun sayfa yüklenme sonucunu Not olarak düşeyim dedim
Index yapılmadan sayfa: 1,17 saniyede yorumlandı
ındex oluşturduktan sonraki aynı sayfa sayfa: 0,61 saniyede yorumlandı
Gördüğünüz gibi fark büyük kısaca yapsanız kaybedilecek birşey yok
Peki bunun zararları varmı her kolaylığın elbette bir ters etkisi var indexleme sonucu veritabanı boyutu biraz artabilir hatalı indexleme sonucu iyi yapayım derken veritabanı daha çok ağırlaşabilir misal gereksiz olan alanları indexleme gereksız yere yük olur her tablo için veya her sutun indexlenmemeli ve buna benzer birçok nedenler ancak doğru bir indexleme sonucu performans ve Ram tüketiminden kurtarır
Biz kendi portalımız AspSitem için indexlenecek tablo ve sütünları sizler için ayırdık ve hazır kod halinde veriyoruz kendi siteleriniz için tablo yapılarınızı sorgularınızı gözden geçirerek sizde yapabilirsiniz seçilecek alanları lütfen çok dikkat ederek seçiniz bu alanlar seçilirken sorgular önemli
AspSiteme index eklemek için Mysqldumper veya PhpMyadmin içinden calıştırılacak olan sorgular
Kod :#copy#
ALTER TABLE uyeler ADD INDEX uyeler_index (kulladi,son_tarih,unvan); ALTER TABLE mesajlar ADD INDEX mesajlar_index (secim,yazan,f_id,soncevap,tarih); ALTER TABLE mesaj ADD INDEX mesaj_index (kime,kimden); ALTER TABLE online ADD INDEX online_index (ip); ALTER TABLE haber ADD INDEX haber_index (baslik,tarih,kat_id); ALTER TABLE download ADD INDEX download_index (isim,tarih,katid); ALTER TABLE yazilar ADD INDEX yazilar_index (baslik,tarih,katid); ALTER TABLE animasyon ADD INDEX animasyon_index (isim,tarih,kat_id); ALTER TABLE linkler ADD INDEX linkler_index (isim,kat_id,tarih); ALTER TABLE mp3ler ADD INDEX mp3ler_index (kat_id,isim,tarih); ALTER TABLE resim ADD INDEX resim_index (isim,kat_id,tarih); ALTER TABLE video ADD INDEX video_index (isim,kat_id,tarih); ALTER TABLE ilanlar ADD INDEX ilanlar_index (kat_id,isim,tarih); ALTER TABLE koseyazi ADD INDEX koseyazi_index (baslik,katid); ALTER TABLE yorumlar ADD INDEX yorumlar_index (y_id,tip); ALTER TABLE oylar ADD INDEX oylar_index (tipid,tip);
|
|
|
AspSiteme index Kaldırmak için Mysqldumper veya PhpMyadmin içinden calıştırılacak olan sorgular
Kod :#copy#
ALTER TABLE uyeler DROP INDEX uyeler_index; ALTER TABLE mesajlar DROP INDEX mesajlar_index; ALTER TABLE mesaj DROP INDEX mesaj_index; ALTER TABLE online DROP INDEX online_index; ALTER TABLE haber DROP INDEX haber_index; ALTER TABLE download DROP INDEX download_index; ALTER TABLE yazilar DROP INDEX yazilar_index; ALTER TABLE animasyon DROP INDEX animasyon_index; ALTER TABLE linkler DROP INDEX linkler_index; ALTER TABLE mp3ler DROP INDEX mp3ler_index; ALTER TABLE resim DROP INDEX resim_index; ALTER TABLE video DROP INDEX video_index; ALTER TABLE ilanlar DROP INDEX ilanlar_index; ALTER TABLE koseyazi DROP INDEX koseyazi_index; ALTER TABLE yorumlar DROP INDEX yorumlar_index; ALTER TABLE oylar DROP INDEX oylar_index;
|
|
|
Bunlar sayesinde MysqlDumper yada PhpMyadmin açarak sorgu kısmından indexlerinizi ekleyebilirsiniz
Altta ise MysqlDumper yada PhpMyadmin ile uğraşmadan bir asp dosyası ile index ekleyebilirsiniz
AspSiteme index eklemek için ASP dosyası kod içeriği
Kod :#copy#
<!--#include file="Gorunum.asp" --> <% Connect.Execute("ALTER TABLE uyeler ADD INDEX uyeler_index (kulladi,son_tarih,unvan)") Connect.Execute("ALTER TABLE mesajlar ADD INDEX mesajlar_index (secim,yazan,f_id,soncevap,tarih)") Connect.Execute("ALTER TABLE mesaj ADD INDEX mesaj_index (kime,kimden)") Connect.Execute("ALTER TABLE online ADD INDEX online_index (ip)") Connect.Execute("ALTER TABLE haber ADD INDEX haber_index (baslik,tarih,kat_id)") Connect.Execute("ALTER TABLE download ADD INDEX download_index (isim,tarih,katid)") Connect.Execute("ALTER TABLE yazilar ADD INDEX yazilar_index (baslik,tarih,katid)") Connect.Execute("ALTER TABLE animasyon ADD INDEX animasyon_index (isim,tarih,kat_id)") Connect.Execute("ALTER TABLE linkler ADD INDEX linkler_index (isim,kat_id,tarih)") Connect.Execute("ALTER TABLE mp3ler ADD INDEX mp3ler_index (kat_id,isim,tarih)") Connect.Execute("ALTER TABLE resim ADD INDEX resim_index (isim,kat_id,tarih)") Connect.Execute("ALTER TABLE video ADD INDEX video_index (isim,kat_id,tarih)") Connect.Execute("ALTER TABLE ilanlar ADD INDEX ilanlar_index (kat_id,isim,tarih)") Connect.Execute("ALTER TABLE koseyazi ADD INDEX koseyazi_index (baslik,katid)") Connect.Execute("ALTER TABLE yorumlar ADD INDEX yorumlar_index (y_id,tip)") Connect.Execute("ALTER TABLE oylar ADD INDEX oylar_index (tipid,tip)")
Connect.Close : Set Connect = Nothing Forum.Close : Set Forum = Nothing Member.Close : Set Member = Nothing
Response.write "<h1>Indexler eklendi</h1>" %>
|
|
|
AspSiteme index kaldırmak için ASP dosyası kod içeriği
Kod :#copy#
<!--#include file="Gorunum.asp" --> <% Connect.Execute("ALTER TABLE uyeler DROP INDEX uyeler_index") Connect.Execute("ALTER TABLE mesajlar DROP INDEX mesajlar_index") Connect.Execute("ALTER TABLE mesaj DROP INDEX mesaj_index") Connect.Execute("ALTER TABLE online DROP INDEX online_index") Connect.Execute("ALTER TABLE haber DROP INDEX haber_index") Connect.Execute("ALTER TABLE download DROP INDEX download_index") Connect.Execute("ALTER TABLE yazilar DROP INDEX yazilar_index") Connect.Execute("ALTER TABLE animasyon DROP INDEX animasyon_index") Connect.Execute("ALTER TABLE linkler DROP INDEX linkler_index") Connect.Execute("ALTER TABLE mp3ler DROP INDEX mp3ler_index") Connect.Execute("ALTER TABLE resim DROP INDEX resim_index") Connect.Execute("ALTER TABLE video DROP INDEX video_index") Connect.Execute("ALTER TABLE ilanlar DROP INDEX ilanlar_index") Connect.Execute("ALTER TABLE koseyazi DROP INDEX koseyazi_index") Connect.Execute("ALTER TABLE yorumlar DROP INDEX yorumlar_index") Connect.Execute("ALTER TABLE oylar DROP INDEX oylar_index")
Connect.Close : Set Connect = Nothing Forum.Close : Set Forum = Nothing Member.Close : Set Member = Nothing
Response.write "<h1>Indexler Kaldirildi</h1>" %>
|
|
|
Aspsitem Ay Yıldız 1,0 dan bu yana indexleme kullanmaktadır neden daha önce paylaşılmadı konusuna gelince olumlu olumsuz sonuçlarını beklediğimiz içindi şu ana kadar herhangi bir yan etkisini görmedim faydası elbette ki var Mysql kullanan tüm sitelere kesinlikle önerimdir
Başka bir yazıda yeniden birlikte olmak dileği ile Hoşçakalın
www.AspSitem.com