Nouveau sujet Répondre Imprimer Syndication RSS 2.0

[MySQL] - Optimisation Table fsb_messages_lus

Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 11:09
Est ce que la table fsb_messages_lus est amené à:

-se vider?
-se voir effacer quelques enregistrements?

Si la réponse est NON alors il y a quelques modifications qu'on pourrait surement apporté pour alléger le forum FSB ;)


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 26 ans
  • Messages : 14944
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 23 Juin 2006, 11:09
Lesquels :p ?


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 11:10
Le but de cette table est de savoir, à quel moment un utilisateur a lu un sujet.
Donc de connaître sa dernière date de visite sur un sujet.

Or on enregistre plusieurs fois cette information sur le même sujet pour le même utilisateur ce qui nous sert à rien.


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 26 ans
  • Messages : 14944
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 23 Juin 2006, 11:11
Ah bon ? Ou tu as vu ça ?


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 12:01
Ben j'ai fais des tests en local:
http://pix.nofrag.com/f5/f7/91d72ccd89d687e1bbd0d3dc9b7c.jpeg
-Quel interêt ici d'avoir 4 fois la même ligne?
Aucun.

-Si on vide tout?
Ben tous les posts sont à relire.


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 26 ans
  • Messages : 14944
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 23 Juin 2006, 12:20
Bonne question, si tu vois d'ou vient le pb signale le moi :)


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 12:39
C'est de l'ironie ou pas ? Car je sais pas comment tu l'as pensé le forum moi.

Donc si c'est volontaire dis moi.


e-Traker
 
Flamme ardente
Avatar de TCool
  • Age : 29 ans
  • Messages : 472
  • Inscrit : 04 Février 2005
  Lien vers ce message 23 Juin 2006, 12:44
Peut être just en modifiant cela
/*
** Fait plusieurs insertions pour une seule requète.
*/
function requete_message_lu($insert)
{
	global $bdd, $config, $langue;

	if ($insert != '')
	{
		$sql = 'INSERT INTO ' . MESSAGES_LUS_TABLE . ' 
				(membre_id, sujet_id, forum_id, dernier_message_lu) 
				VALUES ' . $insert;
		if (!$result = $bdd->requete($sql))
		{
			info($langue['er_titre'], sprintf($langue['er_insert'], 'messages_lus'), __LINE__, __FILE__, $sql);
		}
	}
}


Par ..

/*
** Fait plusieurs insertions pour une seule requète.
*/
function requete_message_lu($insert)
{
	global $bdd, $config, $langue;

	if ($insert != '')
	{
		$sql = 'REPLACE INTO ' . MESSAGES_LUS_TABLE . ' 
				(membre_id, sujet_id, forum_id, dernier_message_lu) 
				VALUES ' . $insert;
		if (!$bdd->requete($sql))
		{
			info($langue['er_titre'], sprintf($langue['er_insert'], 'messages_lus'), __LINE__, __FILE__, $sql);
		}
	}
}


Un REPLACE, sa évite les doublons. vue qu'il insére si exite pas et replace si existe ..

Ou alors faire une clé primaire de 'membre_id, forum_id, sujet_id' (attention au insert en double) ..


TCooL TCooL
MonFSB, hébergement de son forum fsb gratuit ^^
Zoneur And PurPle développement ^^
Tous mes MOD dispo ici
 
Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 13:07
Dans tous les cas, pour ceux qui ont un forum actuellement en place depuis longtemps cette table doit être énorme.

Il faut donc créer une requête DELETE pour supprimer tous les anciens doublons concernant le même membre_id, forum_id et sujet_id

Avec un petit coup d'OPTIMIZE car ca va fragmenter la table ;)


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 26 ans
  • Messages : 14944
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 23 Juin 2006, 13:17
Non non ce n'étais pas ironique mais je ne voyais pas trop d'ou venait le problème. Merci pour la suggestion Tcoll je vais noter pour la prochaine version.


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 14:23
Voici donc un récapitulatif de ce qu'il faut faire pour optimiser cette table. Je pense que ça concerne tout le monde, toute version confondue FSB.
Citation (TCool)

/*
** Fait plusieurs insertions pour une seule requète.
*/
function requete_message_lu($insert)
{
	global $bdd, $config, $langue;

	if ($insert != '')
	{
		$sql = 'INSERT INTO ' . MESSAGES_LUS_TABLE . ' 
				(membre_id, sujet_id, forum_id, dernier_message_lu) 
				VALUES ' . $insert;
		if (!$result = $bdd->requete($sql))
		{
			info($langue['er_titre'], sprintf($langue['er_insert'], 'messages_lus'), __LINE__, __FILE__, $sql);
		}
	}
}


Par ..

/*
** Fait plusieurs insertions pour une seule requète.
*/
function requete_message_lu($insert)
{
	global $bdd, $config, $langue;

	if ($insert != '')
	{
		$sql = 'REPLACE INTO ' . MESSAGES_LUS_TABLE . ' 
				(membre_id, sujet_id, forum_id, dernier_message_lu) 
				VALUES ' . $insert;
		if (!$bdd->requete($sql))
		{
			info($langue['er_titre'], sprintf($langue['er_insert'], 'messages_lus'), __LINE__, __FILE__, $sql);
		}
	}
}


Un REPLACE, sa évite les doublons. vue qu'il insére si exite pas et replace si existe ..

Ou alors faire une clé primaire de 'membre_id, forum_id, sujet_id' (attention au insert en double) ..


La correction faite, on récupère alors l'espace inutile perdu ;) et on optimise le tout (ça peut faire gagner pas mal en taille sur les gros forums!)

En adaptant éventuellement le préfix fsb_, executer ceci dans phpmyadmin:

[sql]CREATE TABLE `fsb_messages_lus_2` (
`membre_id` int( 11 ) NOT NULL default '0',
`forum_id` int( 11 ) NOT NULL default '0',
`sujet_id` int( 11 ) NOT NULL default '0',
`dernier_message_lu` int( 11 ) NOT NULL default '0',
KEY `sujet_id` ( `sujet_id` ) ,
KEY `membre_id` ( `membre_id` )
) ENGINE = MYISAM DEFAULT CHARSET = latin1;

INSERT INTO `fsb_messages_lus_2`
SELECT DISTINCT *
FROM `fsb_messages_lus`;

DROP TABLE `fsb_messages_lus`;

ALTER TABLE `fsb_messages_lus_2` RENAME `fsb_messages_lus`;

OPTIMIZE TABLE `fsb_messages_lus`;[/sql]

Corriger c'est bien, nettoyer et optimiser en plus, c'est mieux ;)


le DISTINCT fait tout ici (:)


e-Traker
 
Chef du projet FSB
Avatar de Genova
  • Age : 26 ans
  • Messages : 14944
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 23 Juin 2006, 14:31
Tu as testé sur une grosse table ? Parce que celle du forum ici même fait 15 mega


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 14:34
Je vais la générer la grosse table bouge pas :-)


e-Traker
 
Flamme ardente
Avatar de TCool
  • Age : 29 ans
  • Messages : 472
  • Inscrit : 04 Février 2005
  Lien vers ce message 23 Juin 2006, 14:37
Citation (burster)
Corriger c'est bien, nettoyer et optimiser en plus, c'est mieux ;)
^^ tu peut aussi faire plus jolie ^^
[sql]CREATE TABLE `fsb_messages_lus_2` as
SELECT DISTINCT *
FROM `fsb_messages_lus`;

DROP TABLE `fsb_messages_lus`;

ALTER TABLE `fsb_messages_lus_2` RENAME `fsb_messages_lus`;[/sql]


TCooL TCooL
MonFSB, hébergement de son forum fsb gratuit ^^
Zoneur And PurPle développement ^^
Tous mes MOD dispo ici
 
Volcan
Avatar de burster
  • Age : 2212 ans
  • Messages : 1685
  • Inscrit : 19 Mars 2005
  Lien vers ce message 23 Juin 2006, 14:40
Je suis pas sur que le AS de cette façon soit géré par tous les SGBD.

Sinon es tu sur d'avoir corrigé partout ? c'est le seul endroit ou y a la fonction INSERT pour cette table?


e-Traker
 
Répondre


.