2017-08-30 2 views

Répondre

3

Oui, vous pouvez appeler la procédure système "@AdHoc" qui prend un paramètre String qui est l'instruction SQL que vous voulez exécuter.

Tous les appels à @AdHoc ont un surcoût supplémentaire, car ils doivent être analysés et planifiés, ou un plan existant est trouvé dans le cache. Après cela, ils sont exécutés exactement comme une procédure stockée précompilée. Chaque serveur du cluster dispose d'un pool de threads pour l'analyse et la planification, de sorte que la capacité à gérer les appels @AdHoc évolue, mais pour les instructions SQL simples et rapides, elle est généralement inférieure à la capacité du cluster à exécuter les transactions. Pour un SQL plus complexe, il faut généralement plus de temps pour exécuter la transaction, donc en fonction du temps d'exécution, la capacité d'analyse peut être plus rapide.

Utilisez les procédures "par défaut" intégrées pour les insertions, par ex. TABLE_NAME.insert. Pour tout ce que vous devez exécuter fréquemment, comme des milliers de fois par seconde, essayez d'utiliser des procédures. Vous pouvez définir des procédures avec une classe java ou en utilisant la syntaxe "CREATE PROCEDURE ... AS" uniquement DDL. N'oubliez pas de partitionner les procédures si possible. Mais n'ayez pas peur d'utiliser les appels @AdHoc, en particulier pour les instructions SQL plus générées dynamiquement.

+0

Merci c'était exactement ce dont j'avais besoin! –

+0

J'ai une autre question: qu'est-ce qui est préférable en utilisant des procédures ou du SQL brut avec @AdHoc? Quelle option aura de meilleures performances pour les requêtes simples et complexes? –

+0

J'ai mis à jour la réponse pour répondre à cette question. Merci pour la question! – BenjaminBallard