PDA

View Full Version : حرفه ای: راهنمایی کنید : پاک کردن Duplicate Row



aszasz
دوشنبه 16 تیر 1393, 23:07 عصر
سلام . دوستان دنبال کوئری هستم که ردیف هایی که مثلا یک ستون آنها شبیه هم هستند رو شناسایی کنه و یکی رو حذف کنه و به اصطلاح ردیف های تکراری رو حذف کنه.
با گوگل کردن موضوع به کوئری زیر رسیدم که خیلی هم خوب عمل میکرد:



DELETE n1 FROM TABLE n1, TABLE n2 WHERE n1.data = n2.data AND n1.id > n2.id


این میاد ستون data ها رو تکراری هاش رو شناسایی میکنه و یک ردیف رو پاک میکنه.

حالا مشکل من اینه که نیاز دارم این کد در اسکریپتم با هر رفرش اجرا بشه و با توجه به اینکه جدول دیتابیس من حدود 20 هزار ردیف داره بسیار زمان میبره و فشار روی mysql میاره
دوستان کوئری سبکتری سراغ ندارند ؟ یا اگر بشه همین کوئری رو جوری تنظیم کرد که فقط 100 ردیف آخر دیتابیسم رو بررسی کنه باز هم برای من خوبه.
منتظر راهنمایی اساتید هستم.

us1234
سه شنبه 17 تیر 1393, 00:23 صبح
آخر همین کوئری لیمیت بذارید :

DELETE n1 FROM TABLE n1, TABLE n2 WHERE n1.data = n2.data AND n1.id > n2.id LIMIT 100

aszasz
سه شنبه 17 تیر 1393, 08:16 صبح
آخر همین کوئری لیمیت بذارید :

DELETE n1 FROM TABLE n1, TABLE n2 WHERE n1.data = n2.data AND n1.id > n2.id LIMIT 100

به این راحتی ها نیست اینجا الان لیمیت که اضافه می کنم اصلا کوئری کار نمی کنه

miladamirzadeh
سه شنبه 17 تیر 1393, 19:06 عصر
به نظرم درست نیست در هر بار رفرش بخوای این کار رو انجام بدی. اگر هر بار رفرش به معنای درج رکورد تازه ای در دیتابیس هست، تنها همون رکورد جدید رو تست کن. خوبه که تو ساعات خلوت ترافیک Job ها یی رو داشته باشی که دستی به سر دیتابیس بکشند.

کوئری پیشنهادی بالا دو تا جدول رو Join می زنه. شاید بهتر باشه نگاهی به ساختار جدولت بندازی و تکراری بودن رو تعریف کنی و جلوی درج رکوردهای تکراری جدید رو بگیری.

miladamirzadeh
جمعه 20 تیر 1393, 21:31 عصر
یک نگاهی به این لینک بیندازید، امیدوارم مورد استفاده قرار بگیرد.
http://devexir.com/articlaes/mysql-articles/93-databases/mysql/mysql-articles/120-%D9%BE%DB%8C%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%B1%D8%AF%DB%8C%D9%81%D9%87%D8%A7%DB%8C-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-%D8%AF%D8%B1-mysql.html