قاعدة البيانات البطيئة إعادة/تحديث/إدراج مشكلة مع أكثر من سجلات 5 ملايين في كل جدول

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

سؤال

كيفية تنظيم قاعدة البيانات لتجنب التباطؤ؟ (المحرك: Myisam)

حاليًا لدي قاعدة بيانات مع أكثر من 5 MILION RECORD في جدول واحد يتسبب في استرداد البيانات البطيئة. أنا أبحث حاليًا عن طرق لتنظيم قاعدة البيانات لتجنب هذه الأنواع من قاعدة البيانات. (محرك قاعدة البيانات Myisam)

الجداول التي تسبب المشكلات هي المشاركات والتعليقات التي تحتوي على أكثر من 5 ملايين سجلات في كل منها.

كان لدي فكرة عند استخدام ملف نصي كتخزين عند حفظ السجلات حسب التاريخ ، بحيث يحتوي كل ملف على بيانات كافية لم يكن يبطئ عمليات استرداد وحفظ العمليات ، ولكن مع قواعد البيانات لا أعرف ماذا أفعل :(

هل هناك أي طريقة لحفظ البيانات (حوالي 5 ملايين سجلات في كل) في قاعدة بيانات MySQL لا تتسبب في بطيئة استرداد البيانات أو إدراجها أو تحديثها؟

هيكل "المشاركات"

    CREATE TABLE IF NOT EXISTS `ibf_posts` (
  `pid` int(10) NOT NULL auto_increment,
  `append_edit` tinyint(1) default '0',
  `edit_time` int(10) default NULL,
  `author_id` mediumint(8) NOT NULL default '0',
  `author_name` varchar(32) default NULL,
  `use_sig` tinyint(1) NOT NULL default '0',
  `use_emo` tinyint(1) NOT NULL default '0',
  `ip_address` varchar(16) default NULL,
  `post_date` int(10) default NULL,
  `icon_id` smallint(3) default NULL,
  `post` text,
  `queued` tinyint(1) NOT NULL default '0',
  `topic_id` int(10) NOT NULL default '0',
  `post_title` varchar(255) default NULL,
  `new_topic` tinyint(1) default '0',
  `edit_name` varchar(255) default NULL,
  `post_key` varchar(32) default NULL,
  `post_parent` int(10) NOT NULL default '0',
  `post_htmlstate` smallint(1) NOT NULL default '0',
  `post_edit_reason` varchar(255) default NULL,
  PRIMARY KEY  (`pid`),
  KEY `topic_id` (`topic_id`,`queued`,`pid`,`post_date`),
  KEY `author_id` (`author_id`,`topic_id`),
  KEY `post_date` (`post_date`),
  KEY `ip_address` (`ip_address`),
  KEY `post_key` (`post_key`),
  FULLTEXT KEY `post` (`post`),
  FULLTEXT KEY `post_2` (`post`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

استفسار:

SELECT p.*, pp.*,.id,m.name,m.mgroup,m.email,m.joined,m.posts, m.last_visit, m.last_activity,m.login_anonymous,m.title,m.hide_email, m.warn_level, m.warn_lastwarn, m.points, m.topics_started, m.skin,
                    me.msnname,me.aim_name,me.icq_number,me.signature, me.website,me.yahoo,me.location, me.avatar_location, me.avatar_type, me.avatar_size, m.members_display_name, m.custom_post_css, m.custom_right_img
                    m.custom_post_color
                        FROM posts p
                            LEFT JOIN members m ON (m.id=p.author_id)
                            LEFT JOIN profile_portal pp ON (m.id=pp.pp_member_id)
                            LEFT JOIN member_extra me ON (me.id=m.id)
                        WHERE p.pid IN(--post ids here) 
                        ORDER BY --ordering here
هل كانت مفيدة؟

المحلول

5M ليس كثيرا.

ربما قمت بفهرسة الجدول خطأ.

يرجى نشر استفسارك وربما سنخبرك بكيفية تحسينه.

تحديث:

SELECT  p.*, pp.*,.id,m.name,m.mgroup,m.email,m.joined,m.posts, m.last_visit, m.last_activity,m.login_anonymous,m.title,m.hide_email, m.warn_level, m.warn_lastwarn, m.points, m.topics_started, m.skin,
        me.msnname,me.aim_name,me.icq_number,me.signature, me.website,me.yahoo,me.location, me.avatar_location, me.avatar_type, me.avatar_size, m.members_display_name, m.custom_post_css, m.custom_right_img
        m.custom_post_color
FROM    posts p
LEFT JOIN
        members m
ON      m.id = p.author_id 
LEFT JOIN
        profile_portal pp
ON      pp.pp_member_id = m.id
LEFT JOIN
        member_extra me
ON      me.id = m.id
WHERE   p.pid IN (--post ids here) 
ORDER BY
        --ordering here

تأكد من أن:

  • members.id هو PRIMARY KEY
  • member_extra.id هو PRIMARY KEY
  • لديك فهرس على profile_portal.pp_member_id

كما حذفت ORDER BY بند لكن هذا البند مهم أيضًا ، يمكن أن يؤدي استخدام الفهارس إلى تحسينه أيضًا.

نصائح أخرى

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

صفوف 5M في جدول واحد ليست كثيرًا ، ما هي المدة التي تستغرقها استفساراتك؟ أظن أنك قد تواجه بعض المشكلات في الفهرسة. يشرح قد يساعد البيان في معرفة ما تفعله الاستفسارات بالفعل.

إذا كنت قد قمت بفهرسة الجداول والاستعلامات العاقلة بشكل صحيح ، فيمكنك النظر في التقسيم..

يحرر:

يمكنك المحاولة إذا كانت إضافة الفهرس (PID ، Author_id) أو الفهرس (Author_id ، PID) على الجدول IBF_POSTS يساعد.

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