limites de mysql - SQL/NoSQL - Programmation
Marsh Posté le 15-05-2002 à 10:33:18
Ce forum tourne sous MySQL et y a des tables avec des millions d'enregistrement (notemment la table des messages)... donc à priori c'est pas une limite de MySQL, mais plutôt une question d'optimisation je suppose.
Marsh Posté le 15-05-2002 à 10:36:23
c'est bien ce que je pensais...
le meilleur moyen d'optimiser ce sont les index n'es-ce pas?
es-ce que l'utilisation d'index est efficace avec mysql??
Marsh Posté le 15-05-2002 à 10:36:45
Faut aussi voir comment tu fais tes requêtes
Marsh Posté le 15-05-2002 à 10:48:15
les requête y a pas 36 facons de les faires je fais un select sur tous les enregistrements de ma table et pour chaque enregistrement récuperé je fait une jointure sur une autre table pour récupérer les informations qui m'intéressent ...
excuse j'ai oublié de préciser que c'était dans du code php!!
$global=mysql_query("select * from matable1 ",$connexion);
while($resultat=mysql_fetch_object($global))
{
$cle=$resultat->cle;
$req=mysql_query("select acrd_radio,acrg_radio from
radios where no_invitation = $inv_ref_g",$connexion);
$res_acr=mysql_fetch_object($req);
Marsh Posté le 15-05-2002 à 10:53:50
les requête y a pas 36 facons de les faires je fais un select sur tous les enregistrements de ma table et pour chaque enregistrement récuperé je fait une jointure sur une autre table pour récupérer les informations qui m'intéressent ...
excuse j'ai oublié de préciser que c'était dans du code php!!
$global=mysql_query("select * from matable1 where moncritere",$connexion);
while($resultat=mysql_fetch_object($global))
{
$cle=$resultat->cle;
$req=mysql_query("select info1,info2 from
matable2 where identifiant = $cle",$connexion);
$rest=mysql_fetch_object($req);
echo "$rest->info1";
echo "$rest ->info2";
}
resultat: fatal error maximum time 30 sec excedeed...
Marsh Posté le 15-05-2002 à 11:12:05
je comprends que ça rame... Ptêtre qu'avec une vraie jointure ça irait mieux
select info1,info2 from matable1, matable2 where (moncritere) and (identifiant=cle)
un truc dans ce genre sera infiniment plus rapide que de faire une requêtre en boucle
ici tu fais simplement une boucle sur le résultat de ça, pour récupérer tous tes info1/info2, et donc tu as une requête au lieu de 600 000...
ps: si jamais des champs ont le même nom dans les deux tables tu dois faire par ex select matable2.info1, etc...
[jfdsdjhfuetppo]--Message édité par antp le 15-05-2002 à 11:13:45--[/jfdsdjhfuetppo]
Marsh Posté le 15-05-2002 à 11:15:27
farid.
antp a raison et en plus on a appris comme ca à l'iut.
tu n'a pas suivi les cours serieusement
Marsh Posté le 15-05-2002 à 11:33:45
c'est pas une mauvise idée...
je vais tenter le coup!!
mr_mat je vais passer chez toi je pense demain
@+
Marsh Posté le 15-05-2002 à 11:58:21
fafe a écrit a écrit : mr_mat je vais passer chez toi je pense demain @+ |
ok pas de pb
Marsh Posté le 15-05-2002 à 12:23:32
faut peut-être penser à l'optimiser aussi
dupliquer les attributs, attributs calculés, ...
ex : stocker le nom du posteur en plus de son id dans la table post, histoire de ne pas devoir faire une jointure avec la table user puisque qd on affiche un post on affiche aussi le nom du posteur.
Marsh Posté le 17-05-2002 à 15:25:05
Hum moi je cherches aussi à optimiser un script em l'occurence, mon forum dont la page principale met 700 à 1000 ms à être généré. (URL : http://www.lanstadium.fr.st/forum)
J'ai fait des tests sur des requêtes avec la présence ou non d'index sur certains attributs de ma table : ya un cas, la traitement est passé de 25ms à 7ms avec l'utilisation d'index.
Sinon question, vaut il mieux utiliser mysql_query() ou mysql_unbuffered_query() pour aacéler le traitement?
Marsh Posté le 22-05-2002 à 10:18:00
Salut
moi aussi je suis à la recherche d'infos
j'ai bien trouvé la taille max des tables, etc, dans la dac mysql.... on constate que les forums ici ont bcp d'enregsitrements, mais y-a-t-il un nombre limite d'enregsitrements au-delà duquel un nouvel enregsitrement refuse de s'insérer ?
j'ai besoin de ces infos pour fair eun doc pour le boulot ;-)
merci à vous les coquinous ;-)))
Elcap
Marsh Posté le 22-05-2002 à 11:25:42
ça dépend de la taille de ta clé (id numérique, char, ou clé composée) comme sur tout le sgbd me semble-t'il.
si tu prends un bigint unsigned, tu est parti pour 18 446 744 073 709 551 615 enregistrements...
Marsh Posté le 22-05-2002 à 11:32:55
La seule limite dont j'ai entendu parler c'est la taille des fichiers. Donc comme sur la plus part des OS pour PC ( à ma connaissance en tout cas) on est limité à des fichiers de 4Go à toi de faire tes petits calculs
Marsh Posté le 22-05-2002 à 11:35:41
En NTFS (sous NT4/2000/XP) on n'est pas limité à 4 Go
Idem pour Linux (enfin ça dépend des file systems j'imagine, mais il me semble que ext2 y a pas cette limite si basse)
[jfdsdjhfuetppo]--Message édité par antp le 22-05-2002 à 11:35:55--[/jfdsdjhfuetppo]
Marsh Posté le 22-05-2002 à 12:33:53
ok, merci pour l'info
en voici une concernant la taille des tables
http://www.mysql.com/doc/T/a/Table_size.html
Elcap
Marsh Posté le 22-05-2002 à 12:36:35
8 million terabytes
he bhe on a le temps de voir venir
Marsh Posté le 25-05-2002 à 15:54:20
tu m'étonnes
la les partitions sont en reiserfs donc le dur sera plein avant d'avoir atteint la limite de taille du FS
[jfdsdjhfuetppo]--Message édité par joce le 25-05-2002 à 15:54:43--[/jfdsdjhfuetppo]
Marsh Posté le 31-05-2002 à 00:21:42
J'ai fait des tests dans ma boite de montée en charge de tables mysql (on a pres de 300 000 inscrits dans notre base); je suis monté a 4 000 000 d'enregistrements sur une table consommateur, et la ca ramait un peu (qques secondes pour récupérer toutes les infos d'un consommateur); en rajoutant des index sur les bons champs (style pseudo, email ou autre champ très sollicité dans les clauses "WHERE" ), c'etait instantané, meme pas une demi seconde, donc les index sont tres utiles mais a mon avis tu as encore de la marge, car mysql est tres rapide.
Mais comme dis antp, ta facon de faire des requetes est
Marsh Posté le 15-05-2002 à 10:28:20
hello,
dites-moi es-ce que quelqu'un sait si les tables mysql ont des limites en termes de capacité...
j'ai des tables qui contiennent 600000 enregistrements et ca rame furieusement!!
---------------
boulet officiel:goueg