UO-Dev Arama


Mysql ipuçları hakkında 1. döküman

Yazar: Leon Jade
Tarih: 06-09-2009 14:50


Paylaş : Paylaş

Şimdi ilk önce ufak tefek detaylara girelim ufak dediğime bakmayın makinanizi ek yükten kurtaracak ufak ipuçları. Bunları yaptıkdan sonra eminim çok daha iyi performans aldığınızı göreceksiniz.

1. olarak yanlış sorgu şekli olan " * " kavramı

Sorgu şekli 1;

Varsayalım ki mysql den playerların isimlerini çekip listeleceğiz. Fakat databasemizde " charName,charKarma,charFame,charKill,charUid,charGold,insertDate "

gibi uzayan sürüsüne field var aşşağıdaki sorgu bizim yapmak istediğimiz iş için çok yanlış bir sorgu bakalım ve görelim:

"select * from playerList" -> bu sorgu bize " charName,charKarma,charFame,charKill,charUid,charGold,insertDate " bu fieldların hepsini verecekdir

ama biz hangisini kullanacağız ? Sadece charName yanına birde button ekleticeksek charUid gerekli bunun için doğru olan sorgu şöyle olmalıdır ;

"select charName,charUid from playerList" bu şekilde performans artmış olucak ve gereksiz yükden makinanız kurtulmuş olacakdır. Diyeceksiniz ki nasıl ?

Şöyle bir düşünün 40 player listeliyorsunuz ve hepsinin 3kb lık dataları çekiliyor bu da her çekildiğinde Ram üzerine 120 kb veri çekilmesi anlamına

geliyor, peki biz sadece 2 field almış olsaydık ? Bu boyut 10 kb a kadar düşmüş olacakdı.

2. olarak num_rows kullanımının hataları ;

"select id from playerList" böyle bir sorguyu num_rows ile toplamak yerine şöyle yapabiliriz;

"select count(id) as sayi from playerList" yapıp fetch_assoc (db.row.0.sayi anlamına gelmekte) yaparak mysql'i yine bir yükten kurtarmış olup 2 kere

saymasını engellemiş oluyoruz.

3. olarak insert kullanımındaki hata ;

Genelde gördüğüm sorgular üzerine konuşayım insert yapan kişiler şu şekilde işlem yapiyor;

"insert into playerList values
Kod:
(NULL,'<name>','<karma>','<fame>','<kills>','<uid>','<gold>','<serv.time>')
"


Gibi devam eden ve field sayısı kadar datayi sistem'e insert etmeye çalışan saçma bir insert şeklini kullanıyor fakat, MysQL in bize sunduğu güzel şeyleri kullanmak aklına gelmiyor örneğin bir Tarihi <serv.time> olarak kaydetmek yerine mysql'den Timestamp yada Datetime kullanıp Current_Date seçeneğini işaretlemiş olsaydı bu field'a insert yapmak zorunda kalmazdı yada... id field'i otomatik gelen sisteme tanıtmış olsa bile NULL olarak kaydetmek yerine kaydetmemeyi tercih etseydi tekrar mysql bunu algılamak için yorulmazdı.

Bunun için nasıl bi sorgu yazılmalı ?

Kod:
"insert into playerList (charName,charKarma,charFame,charKill,charUid,charGold) values ('<name>','<karma>','<fame>','<kills>','<uid>','<gold>')"


Böyle bir sorgu yükü daha azalmış olacak ve hangi field'ı nerede kaydetmek ve nasıl kaydetmek istediğinizi ayarlayabilecekdiniz. Ben mesela şöyle kaydetmek istiyorum ;

Kod:
"insert into playerList (charGold,charKarma,charFame,charName,charKill,charUid) values ('<gold>''<karma>','<fame>','<name>','<kills>','<uid>'
)"

Böyle yapınca fieldlara kaydedilen verilerin yeri değişecek mi ? Tabiki hayır.

Bu bahsettiklerim sadece ufak ve genelde gördüğüm scriptlerde yapılan hatalardan 1-2 tanesidir.

Gelelim gerekli olan ve uğraş verici olan şeylere;

Bir tablomuz var ve adamın sürekli artan bi puanı var? Sürekli adam birilerini kesiyor ve her kesdiğinde insert yapiliyor (Gereksiz update yapmak çözümdü

fakat siz böyle yazdınız neyse..). Bunu toplamak için sürekli While For gibi döngülere giriyorsunuz, gereksiz!

Kod:
select sum(playerPoint) as point from playerPoints where player = '<uid>'


Bu sorgu ne işe yarar? uid ini verdiğiniz player'ın tüm puanlarını toplar ve size point olarak geri döner bunu şu şekilde geri alabilirsiniz Sphere'de "<db.row.0.point>" bu şekilde size gereken çıktıyı vericekdir. Sizin while ile yada for ile topladığınız kullanıcı puanı ne kadarda uğraş verici dimi ?

İlerleyen derslerde olacak anlatımlar :

* Gruop Kullanımı
* Group Concat kullanımı
* Left join kullanımları (2 tabloya aynı anda eş değer bağlantılar yapmak örneğin playerList ile playerPoits'i birbirine bağlamak)
* Left kullanımı
* Mid kullanımı

5 konudan sonra diğer anlatımda da ondan sonraki anlatımlar yer alacakdır.



Yorumlar

Henüz yorum yapılmamıştır.

Oylamalar

Oylama :
Üyelerin oylama ortalaması (10 dışında) : Henüz Oylanmamış   
Oylar: 0

Benzer Sayfalar

SayfalarYorumlarGönderenTarih
Verdata+Tiledata Lbr Eklemek Resimli Anlatım0stylez29-01-2011
Script Ekleme ( Resimli Anlatım )0^Qnd^09-09-2010
Multool ile Static Yapımı ( Resimli Anlatım )0Pyschiqopath21-08-2010
Açık arttırma v1 (MySql)0aldarson17-07-2010
Duyuru sistemi (MYSQL]0Culum07-06-2010


Keywords:

ultima online, RunUO, ultima online download, sphere scripting, role play, uo grafik, second age ultima, uo loop, macroman, pvp server, server kurulumu, sphere, multool, ml mulls, 56b 55r 55i, htmlgumps, client 4x, client edit, sphere release, osi, rp server, sunucular, ghost mouse, inside uo, kingdom reborn, stygian abyss, uo nasıl oynanır, mondain's legacy, age of shadows, world build, grandmaster, ultima online pvp, player dosyaları, ultima online indir, frp game, RunUO 1.0.0, razor, uo rice, hue editör, skill tools, ultima online patch, axis, world build, verdata, verdata patcher, map editör, gump editör, mul patcher, aos mulls, scriptler, anim edit, anim publish, hues mul, hosting vps, event dialog, account sistemi, skill gain, static yapımı,