| Auteur | |
|---|---|
| Gaylord.P | # 21 Mar 2010 - 22:46:52 |
| 408 Posts |
Bonjour, J'ai un soucis assez gênant : certains de mes scripts doivent, pour leur bon fonctionnement, vérifier l'existence de certaines colonnes dans certaines tables. Parfois, il y a une dizaine de vérifications par requête. Je vous laisse imaginer la lenteur du script lorsqu'il y a cinquantes requêtes ... l'avantage, c'est que bien souvent, il s'agit de requête exactement identiques, appelées via. des classes et objets. La requête de vérification de l'existence d'une colonne est celle-ci : Savez-vous s'il est possible de mettre en cache le résultat d'un SHOW COLUMNS ? Je sais qu'avec un SELECT, il suffit d'ajouter un SQL_CACHE, mais impossible dans ce cas de figure ... connaissez vous une autre solution ? Merci d'avance, Gaylord.P. Modifié par Gaylord.P (23 Mar 2010 - 07:51) |
| Heyoan | # 21 Mar 2010 - 23:22:52 |
| Modérateur 8101 Posts |
Salut, je ne pense pas que le SQL_CACHE fonctionne avec autre chose qu'un SELECT mais par contre je suis presque sûr que tu pourrais optimiser ta façon de traiter cela ! Puisque tu fais ça je suppose que tu gères des tables aux colonnes dynamiques donc je verrais bien une gestion en backoffice qui modifierait une table table_colonnes à chaque ALTER TABLE pour ajouter, supprimer ou modifier une colonne et tu n'aurais plus qu'à faire un SELECT dans cette table. Sinon il y aurait peut-être moyen de ne pas faire SHOW COLUMNS FROM table LIKE ... mais récupérer et stocker le temps du traitement le résultat de SHOW COLUMNS FROM table (le traitement PHP pour parcourir les résultats étant forcément plus rapide que n requêtes). |
| Planplan | # 22 Mar 2010 - 15:08:45 |
| 37 Posts |
A toi de voir si cela pourrait t'être utile, mais tu as aussi la possibilité de d'utiliser les tables INFORMATION_SCHEMA. Je ne connais pas bien les tenants et aboutissants, mais il semble que tu puisses transformer ton SHOW en SELECT grâce à ces tables. Plus d'infos ici : http://dev.mysql.com/doc/refman/5.1/en/information-schema.html http://dev.mysql.com/doc/refman/5.1/en/columns-table.html |
| Heyoan | # 23 Mar 2010 - 01:11:06 |
| Modérateur 8101 Posts |
Merci pour l'info ! Du coup il suffit de faire |
| Gaylord.P | # 23 Mar 2010 - 07:51:09 |
| 408 Posts |
Ah oui, bon à savoir, je ne connaissais pas cette possibilité. J'ai tout de même utilisé la seconde méthode de Heyoan, à savoir stocker les résultats dans une variable et tester si celle-ci n'existe pas déjà : le gain de temps est impressionnant puisque mes pages s'affichent quasiment instantanément. J'essaierai cette dernière méthode ultérieurement, sur de grosses pages, afin d'évaluer la différence de temps de calcul entre les deux possibilités. Merci à vous deux en tous cas. Gaylord.P. |