كيف يمكنني العثور على نحو فعال صفوف سائل مكررة في الخلية؟

StackOverflow https://stackoverflow.com/questions/319860

  •  11-07-2019
  •  | 
  •  

سؤال

ولدي جدول النموذج

CREATE TABLE data
{
   pk INT PRIMARY KEY AUTO_INCREMENT,
   dt BLOB
};

وفقد حوالي 160،000 الصفوف وعن 2GB من البيانات في العمود سائل (متوسط. 14KB في النقطة). جدول آخر لديه مفاتيح خارجية في هذا الجدول.

وشيء من هذا القبيل 3000 من النقط متطابقة. وذلك ما أريده هو استعلام من شأنها أن تعطي لي جدولا خريطة إعادة من شأنها أن تسمح لي لإزالة التكرارات.

واستغرق هذا النهج الساذج نحو ساعة على 30-40k الصفوف:

SELECT a.pk, MIN(b.pk) 
    FROM data AS a 
    JOIN data AS b
  ON a.dt=b.dt
  WHERE b.pk < a.pk
  GROUP BY a.pk;

وأنا يحدث لديها، لأسباب أخرى، جدول يحتوي أحجام النقط:

CREATE TABLE sizes
(
   fk INT,  // note: non-unique
   sz INT
   // other cols
);

ومن خلال بناء الأرقام القياسية لكل من FK وآخر للSZ الاستعلام المباشر من أن يستغرق حوالي 24 ثانية مع 50K الصفوف:

SELECT da.pk,MIN(db.pk) 
  FROM data AS da
  JOIN data AS db
  JOIN sizes AS sa
  JOIN sizes AS sb
  ON
        sa.size=sb.size
    AND da.pk=sa.fk
    AND db.pk=sb.fk
  WHERE
        sb.fk<sa.fk
    AND da.dt=db.dt 
  GROUP BY da.pk;

ولكن أن تقوم بعمل مسح الجدول الكامل على دا (جدول البيانات). وبالنظر إلى أن معدل إصابة يجب أن تكون منخفضة إلى حد ما كنت أعتقد أن تفحص فهرس سيكون أفضل. مع أخذ ذلك في الاعتبار في إضافة نسخة 3RD البيانات باعتبارها 5 انضمام للحصول على ذلك، وفقدت نحو 3 ثوان.

وOK حتى بالنسبة للسؤال:؟ <م> هل أنا ذاهب للحصول على أفضل بكثير من الثاني حدد إذا كان الأمر كذلك، كيف

وقليلا من النتيجة الطبيعية هو: إذا كان لدي الجدول حيث استخدام عمود المفتاح نصل ثقيل جدا ولكن بقية يجب فقط الحصول نادرا ما تستخدم، وأنا من أي وقت مضى أن يكون أفضل حالا مضيفا آخر ينضم من هذا الجدول لتشجيع تفحص فهرس مقابل . مسح الجدول الكامل؟


وXgc على #mysql@irc.freenode.net يشير إلى أن إضافة الجدول المرافق مثل الأحجام ولكن مع قيد فريد على fk قد يساعد كثيرا. بعض المرح مع مشغلات وما قد لا تجعل حتى لا سيئة للحفاظ على حتى الآن.

هل كانت مفيدة؟

المحلول

ويمكنك دائما استخدام دالة التجزئة ( MD5 أو <وأ href = "HTTPS: //en.wikipedia.org/wiki/SHA-1 "يختلط =" نوفولو noreferrer "> SHA1 ) للبيانات الخاصة بك ومن ثم مقارنة التجزئة.

والسؤال هو ما اذا كان يمكنك حفظ علامات الرقم في قاعدة البيانات الخاصة بك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top