Comment structurer la base de données pour éviter les ralentissements? (Moteur: MyISAM)Retard de la base de données/mise à jour/insertion d'un problème avec plus de 5mil d'enregistrements dans chaque table
Actuellement, j'ai une base de données avec plus de 5 millions d'enregistrements dans une table qui provoque une récupération lente des données. Je suis actuellement à la recherche de moyens de structurer la base de données pour éviter ce type de base de données. (Moteur de base de données MyISAM)
Les tables qui causent des problèmes sont les publications et les commentaires ayant plus de 5 mil d'enregistrements dans chacun. J'ai eu une idée lors de l'utilisation du fichier texte comme stockage lors de la sauvegarde des enregistrements par date, de sorte que chaque fichier contient suffisamment de données qui ne ralentissaient pas la récupération et l'enregistrement des processus, mais avec les bases de données je ne sais pas quoi faire :(
Est-il possible d'enregistrer des données (environ 5mil enregistrements chacun) dans la base de données MySQL de ne pas provoquer la récupération lente, l'insertion ou la mise à jour des données
« messages » Structure
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;
requête:?
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
Pouvez-vous fournir la structure de base de données et les requêtes que vous utilisez? –
Pouvez-vous montrer ce qu'il y a dans la clause ORDER BY? –