Arkadaşlar MYSQL veritabanımdaki bir tablonun yapısı şu şekilde: id, registerID registerID isimli alan çok uzun bir değer taşıyacağı için tipi TEXT.

Soru şu: Veritabanında 20.000 civarı satır var. Ben istiyorum ki PHP tarafında yazacağım bir kodla, tüm bu satırlar içinde registerID’leri aynı olan satırları bularak sileyim.

Şunu denedim:

@mysql_query("DELETE FROM tablom WHERE id NOT IN(SELECT id FROM (SELECT DISTINCT id, registerID FROM tablom GROUP BY registerID) as tmp)");

İstediğim gibi çalışıyor ama inanılmaz yavaş. 50 - 100 satır için performansı iyi. Ama söz konusu 20.000 satır olunca işlem süresi ÇOK uzun zaman alıyor.

Bu aşamada, istediğim sonuca ulaşmam için ne yapabilirim? Yardımlarınızı bekliyorum.

soruldu: 21 Ağu, 11:11

burhanaksendir's gravatar image

burhanaksendir
8514
cevap kabul oranı: 50%


İlk olarak registerID yi index olarak tanımlarsanız çift kayıtlara izin vermezsiniz ( MsSQL de bu mevcut) SQL cümlesi için ise aşağıdaki cümleyi deneyebilirsiniz.

"DELETE FROM tablom WHERE id NOT IN (SELECT max(id) FROM tablom GROUP BY registerID)"

permanent link

cevaplandı: 26 Ağu, 04:31

bilalkonuk's gravatar image

bilalkonuk
501
cevap kabul oranı: 33%

Cevabınız için teşekkür ederim. Mysql'de TEXT tipi için UNIQUE index izin vermiyor. Mecburen TEXT tipi kullanıyorum ve yine mecburen MYSQL kullanmam lazım. SQL cümlesini şu an deneme fırsatım olmadı, bugün deneyip haber vereceğim.

(28 Ağu, 11:32) burhanaksendir burhanaksendir's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×168
×144
×1

Soruldu: 21 Ağu, 11:11

Görüntüleme: 161 kez

Son güncelleme: 28 Ağu, 11:32

powered by BitNami OSQA