[SQL] couper une grosse table en plusieurs tables - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [SQL] couper une grosse table en plusieurs tables (/showthread.php?tid=4578) |
RE: [SQL] couper une grosse table en plusieurs tables - php_addict - 08-02-2010 salut merci pour vos réponses ;-) RE: [SQL] couper une grosse table en plusieurs tables - NicoMSEvent - 08-02-2010 il faut juste placer les bons index, et faire les bonens requetes (l'ordre dans lequel tu fais tes jointures, et dans lequel tu mets tes clauses WHERE ont beaucoup d'importance! je suis passé d'un temps d'exécution de 5 secondes pour afficher une portion de 30 cases à 0.05 sec juste en changeant l'ordre dont je viens de parler RE: [SQL] couper une grosse table en plusieurs tables - php_addict - 08-02-2010 je vais tester l'odre dans les WHERE mais j'ai fais quelques tests personnellement je suis : - à 0.087 sec pour 10x10 - à 0.29 sec pour 20x20 - à 1.85 sec pour 50x50 - à 6.90 sec pour 100x100 cela te semble correct ou encore optimisable? je ne veux pas afficher 100x100 mais 6.9 sec me parait bien long ... ta requete est elle dans un boucle genre for ($y = 0; $y <= 10; $y++) { for ($x = 0; $x <= 10; $x++) { ou fais tu autrement ? utilises tu les requetes préparées, les vues ? est ce que tu recupere coordonnée par coordonnée ou par ligne de coordonnées (WHERE x BETWEEN) ? merci encore pour tes conseils RE: [SQL] couper une grosse table en plusieurs tables - Argorate - 08-02-2010 En théorie, si on a un bon SGBD il est censé s'occuper tout seul de faire les jointure avant les autres clauses WHERE (du moins c'est se qu'on nous a enseigné) J'ai jamais essayé de voir si mysql était optimisable de se coté là, faudra que je test. Mais 0.087 seconde pour 10*10 je trouve ça cher payé. Tu fais une seule grosse requête et tu travail dans un tableau après? Sinon moi j'ai bien un while imbriqué... C'est dur de dire si c'est optimisable sans connaitre le code, la bd, et le mecanisme que tu utilise ^^ RE: [SQL] couper une grosse table en plusieurs tables - NicoMSEvent - 08-02-2010 JAMAIS mettre une requete dans une boucle!!! :p utilise un between! (moi j'utilise un IN, comme je n'utilise pas de vue "carrée", avec un masque qui me sort la forme que je veux) tu peux poster des morceaux de code, et la structure de ta BDD, je pourrai analyser ça et p-e t'aiguiller vers une bonne solution RE: [SQL] couper une grosse table en plusieurs tables - Ter Rowan - 08-02-2010 je pense que ma méthode peut largement être optimisée, mais comme Nico, ne lance pas des requêtes en boucle pour ma part j'utilise une boucle pour construire la requete (ce que je mets dans le "in") et après seulement je lance la requête finalisée RE: [SQL] couper une grosse table en plusieurs tables - NicoMSEvent - 08-02-2010 @Ter Rowan -> j'ai mon "masque" dans une table (genre : 0,0 représente la case ou le personnage est, -1,0 une case a coté, 0,+1 une case en dessous, etc...) je fais une jointure comme ceci : Code : $req_constr_plt='SELECT m.id '. RE: [SQL] couper une grosse table en plusieurs tables - Ter Rowan - 08-02-2010 ah c'est pas mal comme technique C'est limite plus "sexy" qu'un "in()" par contre je me demandais (avant même ton exemple d'ailleurs) si il y a un intérêt à créer un id en plus des positions x y (voire z,t ,...) pour la table "carte" id / x / y / type / .... plutôt que x / y / type / .... dans les deux cas il faut je pense indexer sur x / y mais quel est l'intérêt et l'utilisation de l'id ? RE: [SQL] couper une grosse table en plusieurs tables - php_addict - 08-02-2010 (08-02-2010, 02:24 PM)Ter Rowan a écrit : par contre je me demandais (avant même ton exemple d'ailleurs) si il y a un intérêt à créer un id en plus des positions x y (voire z,t ,...) pour la table "carte" tu te sert de l'id ou pas? pour ma part je le garde car il me sert dans: - les parametres d'url (je trouve ca plus propre que de passer x et y) - dans ma requete Code : query("SELECT c FROM map WHERE (x BETWEEN $debutx AND $finx) AND (y BETWEEN $debuty AND $finy) ORDER BY y ASC, id ASC") avec mon between je suis obligé de trier les resultat par y et par id (ordre dans lequel les cases ont été crée, cela m'evite de trier par x et par y....) faut que j'essaie avec un seul index pour voir... RE: [SQL] couper une grosse table en plusieurs tables - NicoMSEvent - 08-02-2010 je me serts des ID pour stocker les positions des personnages (dans la table perso, j'ai l'ID de la case), les pnj, les magasins, les autes, ... ce n'est certainement p-e pas la meilleure des solutions, mais pour l'instant ça me convient Dans mes URL, plutot que de dire : "je me déplace vers la case XYZ", je préfère dire "je vais vers le sud-ouest". Il y a moins de vérification point de vue possibilité de triche ^^ |