Ci-dessous est ma table d'amis,
J'ai inclus 2 entrées pour montrer comment cela fonctionne, Quand un utilisateur ajoute une personne comme un ami, il insère 2 entrées dans la base de données avec ce code;Comment puis-je diviser une table mysql en plusieurs tables et interroger l'arrea correct?
<?PHP
//status 0=approved 1=declined approval 3=pending approval
$sql = "insert into friend_friend (userid,friendid,status,submit_date)
values
('$_SESSION[auto_id]','$friendid','0',now()),
('$friendid','$_SESSION[auto_id]','3',now())"; //Line above is my user ID, the other users ID, status 0 for approved on my side, date
//next entry is the receiving users entry, there ID, my ID, 3 for not approved yet, date
executeQuery($sql);
//So that code above is my php that adds a friend
//Below is my table scheme for the friends table
CREATE TABLE IF NOT EXISTS `friend_friend` (
`autoid` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(10) DEFAULT NULL,
`friendid` int(10) DEFAULT NULL,
`status` enum('1','0','3') NOT NULL DEFAULT '0',
`submit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`alert_message` enum('yes','no') NOT NULL DEFAULT 'yes',
PRIMARY KEY (`autoid`),
KEY `userid` (`userid`),
KEY `friendid` (`friendid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1756421 ;
--
-- Dumping data for table `friend_friend`
--
INSERT INTO `friend_friend` (`autoid`, `userid`, `friendid`, `status`, `submit_date`, `alert_message`) VALUES
(637229, 2, 1, '1', '2007-10-18 01:02:00', 'no');
INSERT INTO `friend_friend` (`autoid`, `userid`, `friendid`, `status`, `submit_date`, `alert_message`) VALUES
(637230, 1, 2, '1', '2007-10-18 01:02:00', 'no');
INSERT INTO `friend_friend` (`autoid`, `userid`, `friendid`, `status`, `submit_date`, `alert_message`) VALUES
(637231, 22901, 1, '1', '2007-10-18 02:24:05', 'no');
INSERT INTO `friend_friend` (`autoid`, `userid`, `friendid`, `status`, `submit_date`, `alert_message`) VALUES
(637232, 1, 22901, '1', '2007-10-18 02:24:05', 'no');
?>
Ce que je voulais faire est divisé la table friend_friend vers le haut dans plusieurs tables en fonction du nombre d'ID utilisateur
Comme tous les ID utilisateur de entre 1-20,000 aller à une table, tous les noms d'utilisateurs 20,001-40,000, 40,001- 60 000 vont tous à une autre table
Je ne sais pas comment faire mieux, je aurais besoin de détecter quelle table un utilisateur doit interroger lors de l'ajout d'un nouvel ami et ainsi que lors de la récupération liste d'amis des utilisateurs
je suppose dans mon code en haut, les 2 entrées pour ajouter un utilisateur devraient être divisées en 2 requêtes et mettre à jour des tables différentes probablement?
Pourquoi voulez-vous diviser les ID utilisateur? – Milhous
Comme ce tableau grossit je pense qu'il sera plus performant d'exécuter des requêtes sur une table plus petite, c'est déjà comme 1.700.000 lignes en un an à ce rythme cette table pourrait être plusieurs millions de lignes et c'est la table la plus accédée sur mon site, En général, des milliers de requêtes se sont déroulées quotidiennement contre lui et en même temps lorsque le trafic était dense – JasonDavis
Hi Jasondavis, Avez-vous trouvé une solution appropriée à votre problème? Quelle est la meilleure approche après le partitionnement ou le sharding? Quelle est la taille de votre table maintenant? Merci pour votre aide ? Ceci est un commentaire pour votre question à http://stackoverflow.com/questions/1247841 – Bujji