MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen softdestek »

firmaadresvergi tablomda yaklaşık 130.000 civarında kayıt var.
" firmaadresvergi.Adresi," bu alan mediumtext olarak tanımlanmış.
Bu alan olmadan aşağıdaki query çalıştırınca sorguda bir sorun olmuyor.
Eğer bu alanı dahil edip sorguyu dahil edince exeprogram "Out of memory" hatası veriyor kısacası bellek iflas ediyor.

Bu konunun çözümü nasıl yapılır.
a)my.ini dosyasında nasıl bir ekleme yapmam lazım? bu mediumtext alanlarla ilgili.
b)Delphinin derleyicisinde ne tür değişiklik yapabilirim.(stack filan o değerlerin hepsini denedim ama yine de hata veriyor)

mysql ile ilgilenen arkadaşların acil yardımlarını talep ediyorum .Şimdiden teşekkür ederim.

NOt:Aşağıda veritabanı firebird veritabanına aynen aktardım(dump). IBDA komponetleri ile aynı sql çalıştırdım.Yaklaşık 19 sn sorgu sonucu dönüyor.
Kısacası firebirde hata yok..Sorun MYSQL ile sanırım bazı püf noktalarda yatıyor..





SELECT
firmaadresvergi.SiraNo,
firmaadresvergi.FirmaKodu,
firmaadresvergi.Aciklama,

firmaadresvergi.Adresi,

firmaadresvergi.il_kodu,
firmaadresvergi.ilce_kodu,
firmaadresvergi.VergiDairesiKodu,
firmaadresvergi.VergiDaireHesapNo,
firmaadresvergi.Telefon,
firmaadresvergi.Fax,
firmaadresvergi.PostaKodu,
firmaadresvergi.Email,
firmaadresvergi.DigerUlasim,
firmaadresvergi.CepTel,
firmaadresvergi.USERADI,
firmaadresvergi.USERDATE,
firmaadresvergi.USERTIME,
firmaadresvergi.USERGIRIS,
firmaadresvergi.USERGIRISDATE,
firmaadresvergi.USERGIRISTIME
FROM
firmaadresvergi
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen Battosai »

Merhaba, bahsettiğiniz alan içinde sadece adres bilgisi var ise alanı VARCHAR yapın. Muhtemelen veritabanı oluştururken yanlış alan tipi seçilmiş... MySQL limit artırılarak çözüm bulunabilir fakat gerek yok. Ayrıca neden 130.000 kaydı SELECT yapıyorsunuz ?
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen softdestek »

Cevabınız için teşekkür ederim.
Eğer zaten çözüm bulamassam benimde düşündüğüm şey alanı varchar yapmak.Fakat geçmişe dönük olarak(8 yıl) yapmam gerektiği için şimdilik farklı bir çözüm arayışındayım. Query ile çok fazla kaydı çekmemim sebebi Cxgrid lerle süzme yapabilme ihtiyacı yüzünden..

Fakat asıl merak ettiğim şu FIREBIRD VE MYSQL ile başkaları değil 130 bin kayıt milyonlarca kayıt çekiyor ve saniyeler içerinde ben ise 130 bin çekmeye çalıştığım zaman çuvallıyorum. Bunun püf noktaları olması lazım..
1)Aynı alanlarla firebird de 1,5 sn de çekiyorum.Hata filanda vermiyor.Fakat bence bu sürede uzun.
2)Mysql de hiçmi text alan kullanmyacağız illada her şeyi varchar mı kullanmamız lazım?
Çözüm arayışım bu yüzden.
En son softdestek tarafından 05 Eki 2013 02:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen Battosai »

Merhaba, veritabanı ile çalışıyorsanız temel kural ihtiyacın olduğu yerde limitli kayıt çekmektir. Küçük veritabanları ile localde çalışırken çok mühim değildir fakat sağlam program yapacağım diyorsanız işin püf noktaları çoktur. Bu forumda bu mevzular çok konuşuldu. Ayrıca milyon kayıtı SELECT yapan aklı başında programcı yoktur. Eğer bildiğiniz bir uygulama varsa burda yazında öğrenelim. Test amaçlı ben şu kayıtların hepsini bir çekeyim bakalım ne olacak diye deneme yapılabilir ama production ortamında uygulamada böyle bir şey olmaz. Şu kadarını söyleyeyim siz anlayın ekranda göstermek için 1000 kayıt bile fazladır.

"Geçmişe dönük yapmam gerekiyor demenizden" bir şey anlamadım. Komutla veya kullandığınız db yönetim programı ile kolayca varchar yapabilirsiniz. İlk önce aşağıdaki sorgu ile mevcut "firmaadresvergi.Adresi"
alanı için max karakter uzunluğunu bulun

SELECT LENGTH(adres) AS maxUzunluk FROM TABLO ORDER BY maxUzunluk DESC LIMIT 1

Sonuca görede VARCHAR(*) uzunluk değerini verin. Böylece kayıtlarda bir kayıp olmaz.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen softdestek »

SELECT LENGTH(adresi) AS maxUzunluk FROM FIRMAADRESVERGI ORDER BY maxUzunluk bu sql göre en uzun uzun luk 316 karekter çıkıyor;
Varchar(255) char(255) en fazladesteklediği içinde 316-255=111 maksimum bir harf kaybı oluyor dönüşümde..
Alanı text alan çeşiti olarak tutup query ile listeleyebilecek bir çözüm bulmak lazım ama nasıl?
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen Battosai »

MySQL 5.0.3 versiyonundan önce öyleydi ama şimdi varchar(65535) değerini verebilirisiniz.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen softdestek »

Size ne kadar teşekkür etsem azdır.
Allah razı olsun sizden.
Adresi iki adres alanına bölmye karar verdim. Aşağıdaki gibi..
select substring(adresi,1,255) as Adres1,substring(adresi,255,100) as Adres2 from FIRMAADRESVERGI
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen Battosai »

Yine yanlışlardasın.... :) Şu alanı VARCHAR(500) yap kurtul. Sorgularda mümkün oldukça fonksiyon kullanmamaya çalış. Ve dediğim gibi 130.000 kaydın hepsini kullanma.... sorgularında limit kullan
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen softdestek »

Ah ah ..bende biliyorum.Fakat sorun şu mysql versiyonum eski 4.1 versiyon varhar(255) den fazlasını desteklemiyor.
Zamanında zeos komponentleri ile yazmıştım. Zeos eski sürüm olduğu içinde mysql 5 desteklemiyor.(libmysql.dll) kullandığı libden başka libmysql kabul etmiyor.

Tek çarem MYDAC componentlerine geçmek.Çalışmalara başladım aslında..
Fakat yazdığım muhasebe programı vardı firebird veritabanı kullanan şimdiye kadar sorunsuz da çalıştı gibi.2002 den beri.
Bazen diyorum MYSQL komple terkedip Firebird geçeyim diyorum ama şu anda düşünme aşamasındayım..
Bakalım gelecek ne gösterecek..
Ben MYSQL de MYISAM tipi kullandım ama INNOYA geçersem daha iyi olur gibime geliyor.Fakat mysql de my.ini dosyası bayağı bir ayar gerektiriyor.
Firebirdde ise my.conf dosyasında ise hemen hemen hiç ayar yok gibi mysql ile karşılaştırınca .
Aslında sadelik her zaman iyidir bana göre tabi..
Geçebilirsem uzun vadede tüm programlarımı firebirde geçirmeye çalışacam.İnşallah
Sağol ÜSTAT.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: MYSQL MEDIUMTEXT ALAN içeren sorguda iflas ediyor?

Mesaj gönderen Battosai »

Zeos Library MySQL 5.x ile çalışıyor. MySQL'in 32 bit veya 64 bit versiyonlarına göre libmysql.dll mevcut uygun olanı kullanırsanız bağlanırsınız.
http://forums.mysql.com/read.php?168,415693,415693

Belki zeos güncellemesi yapmanız gerekebilir. Şuan Zeos 7 sürümü mevcut
http://sourceforge.net/projects/zeoslib/
Cevapla