Veritabanı Konusunda Kafama Takılan Birşey
-
şimdi tablo diye bir tablo düşünün bunun içinde 1. durumda şöyle birşey olsun
oncelik1
oncelik2
oncelik3bunların hepsi alan.Farklı şeyler var içlerinde.İd, cevap , anahtar...Birde;
genel
var bunun içinde id, cevap, anahtar birde oncelik var.Öncelik kısmına 1,2,3 giriyorum.
Şimdi merak ettiğim soru şu bir sql sorgusunda;
select id from genel where oncelik=1 yapmak mı yoksa
select id from oncelik1 yapmak mı daha mantıklı ?
yani genel tablosunda oncelik=1 dediğimizde bütün kayıtları okur mu ? eğer öyleyse perfromans kaybı yaşamaz mı ? çünkü oncelik 1,2,3 olduğunu anlamak için işlem yapması gerek her satıra ayrı ayrı....
-
hocam düz mantık oncelik seviyeleri farklı olan kayıtları bir tabloda tutmaktansa ayırmanın yararlı olacağın işaret eder ama kullanım yerine göre değişir tabi.
Eğer önceliğe göre ayrılırsa tabloların içerecek sayısı, kayıt miktarı düşer.
E ne kadar az kayıt o kadar performanstır bi yerde.
Her tabloda 500.000 kayıt olsa 1.5 milyon kayıt barındıran bir tabloda sorgu yapmak mı yoksa 500bin kayıt barındıran tablolar da sorgu yapmakmı iyidir diyerekten soruyla neden böyle olduğunuda açıklıyabiliriz.ayrıca zuqlü bekliyoruz :D
-
:D gelecek gelcek.Önce mysqlun falan çalışma mantığını çözmeme lazım
ve maalesef googleda arıyorum hala adam gibi Türkçe döküman bulamadım :-/
edit:
bu arada demek istediğm kesinlikle o mesela oncelik1,2,3 olsun
500-500-500 bölmek daha sorna sorguda from oncelik1 demek mi mantıklı ?
yoksa 1500 ünüde aynı yerde tutup from genl where oncelik=1 demk mi..
Daha dorğusu şöyle, aralarında performans kaybı olur mu ? benim amacım 10 bin kayıt olacak.Tarcan için düşünüyorum.Öncelik1,2,3,4,5 var hepsini ayırmak mı daha mantıklıydı yoksa bir tutmak mı :-/
-
hocam ne kadar küçük o kadar performans 500 500 500 varken 1500 diğerine göre daha performanssızdır
-
veritabanın performansını arttırmak için nekadar küçük parçalara bölebiliyorsa bölcek altın kurallardan biri budur
-
vallahi dene derim abi en güzeli tecrubeyle öğrenmek ama en kayıt daha hızlı oluyor ben böyle biliyorum en azından.
Bir işte 1milyon kayıtlı bir tablo yüzünden rezil olmuştum tabi o zaman dahada bi haberdim olaylardan tablo indexsizdi.
sorgularına göre doğru indexlenmiş tablolar da hız daha da iyi olabillir konuyla alakalı değil gerçi bu ama ben buna benzer bir yazı okumak isterdim rezil olmadan önce :P
2 veritabanı olusturursun daha sonra birinde tek tablo diğerinde 3 tablo olacak şekilde yaparsın.
birinci veritabanında içerik diye bir tablo açıp yapısıda id keyword oncelik şeklinde yaparız öncelik indexli olursa daha tatlı olur.
for($i=0;$i<30000){mysql_query("insert into icerik values('','" .rand(10000,90000). "','" .rand(1,3). "'); ");
}
>bununla içini doldurursun abi
tablo ikide de oncelik1 oncelik2 oncelik3 diye 3 tablo oluşturup hepsinin yapısınıd id keyword olarak yapalım
for($i=0;$i<10000){mysql_query("insert into oncelik1 values('','" .rand(10000,90000). "'); ");
for($i=0;$i<10000){
mysql_query("insert into oncelik2 values('','" .rand(10000,90000). "'); ");
}
for($i=0;$i<10000){
mysql_query("insert into oncelik3 values('','" .rand(10000,90000). "'); ");
}
>
bununlada burdaki tablolrı doldurur kayıt sayısı eştir mantıkta yaptığı işlerde eştir.
benim ön yargım 2. yöntemde daha hızlı sonuçlar alacağın olur. sebepleri iseilk olarak ekstra bir indexleme yapman gerekmez oncelik icin bu fiziksel boyutu düşürür.
yine dediğim gibi tablo içindeki kayıt sayısı az olduğu içinde daha hızlı sonuçlar gelecektir.
çok uzun sürmez bence denemek boş vaktinde bi incele derim abi ^^dilim döndüğünce açıklamaya çalıştım kolay gelsin
not:yazıyı komple inceleyemedim klavyemin bagzı tuşları basmıyor dengesizlik varsa affedin. -
Hangi sorgu sonucun bir sonraki sorguya daha az kayıt bırakıyorsa, o önce kullanılmalıdır... Bu sayede her seferinde daha az kayıt seçerek eleme yaparsın...
-
zumsuk bunu yazdı:
-----------------------------:D gelecek gelcek.Önce mysqlun falan çalışma mantığını çözmeme lazım
ve maalesef googleda arıyorum hala adam gibi Türkçe döküman bulamadım :-/
edit:
bu arada demek istediğm kesinlikle o mesela oncelik1,2,3 olsun
500-500-500 bölmek daha sorna sorguda from oncelik1 demek mi mantıklı ?
yoksa 1500 ünüde aynı yerde tutup from genl where oncelik=1 demk mi..
Daha dorğusu şöyle, aralarında performans kaybı olur mu ? benim amacım 10 bin kayıt olacak.Tarcan için düşünüyorum.Öncelik1,2,3,4,5 var hepsini ayırmak mı daha mantıklıydı yoksa bir tutmak mı :-/
-----------------------------hoca oncelik1 tablosunda sadece öncelik durumunu tutmayacaksın ki
yanında birde o kaydın idsini girmen gerekiyor.
her kelimeye bir öncelik girdiğini varsayıyorum.
10.000 kaydı tekrar 2 sütunlu bir tabloya kaydettiriyorsun.
aynı şekilde oncelik1 tablosunda da 10.000 kaydın içinden sorgu yapacaksın :)
where oncelik=1 dememek için from oncelik1 diyerek fazladan 2 sütunlu bir tablo açıyorsan
oncelik2 , oncelik3 , oncelik4 , oncelik5 gibi bi kaç 10.000 kayıtlık tablo daha olduğunu düşünürsek :)
bence bu konuda biraz daha düşünmek gerek :)
-
zumsuk bunu yazdı:
-----------------------------:D gelecek gelcek.Önce mysqlun falan çalışma mantığını çözmeme lazım
ve maalesef googleda arıyorum hala adam gibi Türkçe döküman bulamadım :-/
edit:
bu arada demek istediğm kesinlikle o mesela oncelik1,2,3 olsun
500-500-500 bölmek daha sorna sorguda from oncelik1 demek mi mantıklı ?
yoksa 1500 ünüde aynı yerde tutup from genl where oncelik=1 demk mi..
Daha dorğusu şöyle, aralarında performans kaybı olur mu ? benim amacım 10 bin kayıt olacak.Tarcan için düşünüyorum.Öncelik1,2,3,4,5 var hepsini ayırmak mı daha mantıklıydı yoksa bir tutmak mı :-/
-----------------------------
Hacı sen bana 10 15 dakkalık ders versene yahu :))Bende veritabanı oluşturmayı yenı becerebılenlerdenım şimdi merak etıgım ve yapmaya çaliştiğim şu:
Ben db oluşturuyorum oluşturduktan sonra gereklı dosyaları uplıyorum ftpye ondan sonra sql yuklemeye çalışıyorum fakat hep yalan yanlış yerlere giriyorum ıkı dakkada bana bırgun bunu ızah edebılırmısın hacı :))
-
Abizittin bunu yazdı:
-----------------------------
zumsuk bunu yazdı:
-----------------------------
-----------------------------hoca oncelik1 tablosunda sadece öncelik durumunu tutmayacaksın ki
yanında birde o kaydın idsini girmen gerekiyor.
her kelimeye bir öncelik girdiğini varsayıyorum.
10.000 kaydı tekrar 2 sütunlu bir tabloya kaydettiriyorsun.
aynı şekilde oncelik1 tablosunda da 10.000 kaydın içinden sorgu yapacaksın :)
where oncelik=1 dememek için from oncelik1 diyerek fazladan 2 sütunlu bir tablo açıyorsan
oncelik2 , oncelik3 , oncelik4 , oncelik5 gibi bi kaç 10.000 kayıtlık tablo daha olduğunu düşünürsek :)
bence bu konuda biraz daha düşünmek gerek :)
-----------------------------hocam her durumda 10 tablonun içine aldıgımız 10.000 kayıtın tek tabloda olmasındansa bu bölmek iyidir ama başından da dediğim gibi kullanıldığı yere bağlı olarak tercihler değişebilir tabi.
10x10.000 birmilyon kayıtlı tek bir tablo ile hangi tabloda arama yapacağını bilen ve ona göre tablosunu seçen onbin kayıtlı bir tabloda arama yapan bir sorgu daha hızlıdır.
-
:D
where oncelik=1 deyince mysql oncelik 1 haricindekileri iplemiyor işleme katmıyor galba ? bu yüzden sql sorgusuna bir problem olmaya bilir mi acep ?