Soru & Cevap

PHP MYSQL – Tekrarlanan Satırları Silmek

21.08.2016 - 06:07

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.

440 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-57989-1451678910.jpg
serdarşen
22.08.2016 - 11:16

Merhaba Burhan, veri tabanlarında sorgulama hızını artırmak için sütunları index'leme diye bir yöntem vardır. Şu sayfada da bunun mysql'de nasıl uygulanacağı anlatılıyor. Ama bunları denemeden önce verilerinin yedeğini al veya önce örnek bir vertabanında dene.

http://www.tutorialspoint.com/mysql/mysql-indexes.htm

Yukarıdaki sayfada simple ve unique olmak üzere iki çeşit index olduğu anlatılıyor. unique index veri tekrarına izin vermiyor simple index veriyormuş. Aşağıda örnek query parçaları var.

/*unique index*/
CREATE UNIQUE INDEX benim_unique_indexim
ON benim_tablom (registerID)

/*simple index*/
CREATE INDEX benim_simple_indexim
ON benim_tablom (registerID)

 

Burhan Aksendir
23.08.2016 - 12:11
Merhaba Serdar, Cevabın için teşekkür ederim. Bu önerini daha önce denedim. Söz konusu alan Text tipinde olduğu için ne yazık ki, mysql bu unique index ayarına izin vermiyor.
Serdar Şen
23.08.2016 - 09:21
anladım, bişey değiil. Ama bir de fulltext index diye bir kavram varmış onu da araştır istersen. https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html