Je suis assez nouveau dans le SQL et j'ai besoin d'aide pour certaines tâches. J'ai une requête qui est appelée par notre code Flex/Java qui joint plusieurs tables pour obtenir des informations. Lors de l'exécution d'une analyse d'analyse, j'ai vu que la requête prend plus de 15 minutes, ce qui arrive parfois même si le site est soumis à un trafic intense. Ce que j'essaie de faire est de créer une règle, ou un déclencheur, qui voit si la requête est appelée et sélectionne les données de la table de vue matérialisée à la place. J'ai essayé d'implémenter une règle pour cela, mais j'avais du mal quand j'ai reçu des erreurs en essayant de joindre plusieurs tables dans la règle. Essentiellement, y a-t-il un moyen, que ce soit une règle, un déclencheur ou quoi que ce soit d'autre, de voir si une certaine requête est exécutée et que je peux remplacer cette requête par une autre d'une autre table? Merci d'avance.Comment réécrire une requête dans PostgreSQL 8.3
Exemple de la requête:
select
player_id,
player_names,
player_level,
current_location
from
server_info
join players using (player_id)
join locations using (location_id)
where
current_location = 'Central Hub'
Alors ... vous voulez détecter si une requête spécifique est exécutée, l'arrêter et injecter une requête différente dans la même session sans que le programme d'apblication ne s'en aperçoive? Ce n'est pas une réécriture de requêtes, c'est ... Je ne sais pas comment l'appeler, mais je suis à peu près certain que ce n'est pas la bonne façon de résoudre le problème. Ne pouvez-vous pas mieux formuler la requête, puis modifier le point dans l'application où il est émis? –
Cela ne semble pas une requête terriblement complexe. Êtes-vous sûr que ce n'est pas seulement un problème d'indexation sur les tables? En supposant que les jointures sont sur FK et peut-être un index sur current_location, cette requête devrait être assez rapide. –
Nous avons une base de données assez volumineuse et nous sommes actuellement en train de tout transférer vers de nouveaux serveurs et éventuellement de refaire la majorité de la base de données. Le problème est que nous avons deux applications distinctes, une pour le client et une pour l'administrateur, et seule l'application administrateur est capable d'obtenir les informations sur le serveur. Nous avons essayé de le faire dans notre propre code Flex, mais le projet a été corrompu et nous n'avons pas besoin de temps ni de ressources pour installer une nouvelle application Flex. Nous avons donc pensé qu'une règle serait un substitut rapide. Ce n'est pas la bonne réponse, mais temporaire. – Seb