Différence de performance entre LINQ et les procédures stockées
Connexes
J'ai beaucoup entendu parler d'avant en arrière sur les avantages des procédures pré-compilé. Mais quelles sont les réelles différences de performances entre LINQ et des procédures Stockées sur les Sélectionne, les Insertions, Mises à jour, Suppressions? Quelqu'un a exécuter des tests à tous les pour voir si il n'y a aucune différence majeure. Je suis aussi curieux de savoir si un plus grand nombre de transactions fait une différence.
Ma conjecture est que LINQ déclarations de mise en cache après la première transaction et de la performance est probablement va être à peu près identiques. Pensées?
source d'informationauteur Al Katawazi | 2009-04-15
Vous devez vous connecter pour publier un commentaire.
LINQ devrait être proche de performances, mais je suis en désaccord avec l'énoncé ci-dessus qui dit que LINQ est plus rapide, il ne peut pas être plus rapide, il pourrait éventuellement être tout aussi rapide que si, toutes autres choses étant égales par ailleurs.
Je pense que la différence c'est qu'une bonne SQL developer, qui sait comment faire pour optimiser, et utilise des procédures stockées va toujours y avoir un léger avantage en performance. Si vous n'êtes pas fort sur SQL, laissez Linq figure it out pour vous, et de votre performance n'est plus susceptible d'être acceptable. Si vous êtes une forte SQL developer, utiliser des procédures stockées pour prendre un peu de performance supplémentaire si votre application exige.
Il est certainement possible que si vous écrivez terrible SQL pour code quelques procédures stockées qui s'exécutent plus lentement que Linq serait, mais si vous savez ce que vous faites, des procédures stockées et un Datareader ne peut pas être battu.
Requêtes LINQ peuvent (et devraient) être précompilés. Je n'ai pas de repères afin de partager avec vous, mais je pense que tout le monde devrait lire cet article de référence sur la façon de le faire. Je serais particulièrement intéressé à voir une comparaison de la précompilés des requêtes LINQ pour SPROCS.
Il n'y a pas beaucoup de différence, sauf que LINQ peuvent se dégrader lorsque vous avez beaucoup de données et vous avez besoin d'une base de données de paramétrage.
Procédures stockées sont plus rapide par rapport à une requête LINQ ils peuvent prendre le plein avantage de fonctions SQL.
lorsqu'une procédure stockée est exécutée, la prochaine fois, utilise une base de données en mémoire cache du plan d'exécution pour l'exécution de la procédure stockée.
tandis que la requête LINQ est compilé à chaque fois.
Par conséquent, la requête LINQ prend plus de temps d'exécution par rapport aux procédures stockées.
Procédure stockée est une meilleure façon pour l'écriture de requêtes complexes par rapport à LINQ.
LINQ2SQL requêtes s'effectuent pas différemment de tout autre ad-hoc paramétrée requête SQL, autres que la possibilité que le générateur ne peut pas optimiser la requête dans le meilleur de la mode.
La perception commune est que ad-hoc des requêtes sql réussissent mieux que les Procédures Stockées. Toutefois, ceci est faux:
Compte tenu de ce qui précède et du fait que LINQ génère des requêtes ad-hoc, ma conclusion est qu'il n'y a pas de différence de performances entre les Procédures Stockées & LINQ. Et je suis également apte à croire que SQL Server ne serait pas de revenir en arrière en termes de performances des requêtes.
Linq devraient être utilisées à la couche logique métier sur le dessus de vues créées dans sql ou oracle. Linq vous permettent d'insérer une autre couche de logique métier, entretien de ce qui est dans les mains de codeurs ou non sql gars. Il va certainement pas faire aussi bien que sql coz sa précompilés pas et vous pouvez faire beaucoup de choses différentes dans le domaine sps.
Mais vous pouvez certainement ajouter un détail de la programmation et de séparer la logique métier de base, les tables sql et les objets de base de données à l'aide de Linq.
Voir LINQ-to-SQL vs procédures stockées de l'aider, je pense que le post est plus de l'info. vous avez besoin d'.
Sauf si vous essayer d'obtenir chaque milliseconde de votre application, que ce soit pour utiliser une procédure stockée ou LINQ peut être déterminée par ce que vous attendez développeurs de savoir et de maintenabilité.
Procédures stockées sera rapide, mais quand vous êtes en train de développer une application que vous pouvez trouver que la facilité d'utilisation de LINQ peut être positif, comme vous pouvez le modifier à votre requête et votre type anonyme qui est créé à partir de LINQ très rapidement.
Une fois que vous avez terminé l'écriture de l'application et vous savez ce que vous voulez, et de commencer à regarder à l'optimisation de ce dernier, alors vous pouvez regarder d'autres technologies et si vous avez de bons tests unitaires, alors vous devriez être en mesure de comparer les différentes techniques et à déterminer quelle solution est la meilleure.
Vous pouvez trouver cette comparaison de différentes manières .NET 3.5 pour interagir avec la base de données utile.
http://toomanylayers.blogspot.com/2009/01/entity-framework-and-linq-to-sql.html
Je ne pense pas que je voudrais avoir ma couche de base de données dans le code compilé. Elle doit être séparée de la couche de non-combinés. Comme je l'ai développer et de faire usage de l'Agile, je suis en constante évolution de la conception de base de données, et le processus est très rapide. L'ajout de colonnes, en supprimant des colonnes ou la création d'un nouveau tables dans SQL Server est aussi facile que de taper dans Excel. Normaliser un tableau ou de normalisation est également assez rapide au niveau base de données. Maintenant, avec Linq je voudrais aussi changer le mode de représentation d'objets chaque fois que je fais une modification de la base de données ou de vivre avec elle, pas vraiment compte de la façon dont les données sont stockées. C'est beaucoup de travail supplémentaire.
J'ai entendu dire que Linq entités peuvent abriter votre demande de changement de base de données, mais qui ne fait pas de sens. La conception de base de données et la conception de l'application doivent aller main dans la main. Si je normaliser plusieurs tables ou faire d'autres refonte de la base de données que je ne veux pas d'une Linq modèle d'objet pour ne plus refléter la réelle conception de base de données.
Et que dire de l'avantage de peaufinage d'une Vue ou d'une Procédure Stockée. Vous pouvez le faire directement au niveau base de données sans avoir à re-compiler le code et de le libérer à la production. Si j'ai une Vue qui montre les données de plusieurs tables et j'ai décider de changer la conception de base de données tout ce que j'ai à faire est de changer ce point de Vue. Tout mon code reste le même.
<script>alert("hello") </script>
Je pense que le faire sur le serveur (que ce soit dans LINQ ou ad-hoc SQL) va être plus rapide ou plus efficace que de laisser SQL Server de le faire sur la base de données?Pour les requêtes simples, puis LINQ est évidemment mieux qu'elle sera pré-compilé, vous donnant l'avantage d'avoir une vérification de type , etc. Toutefois, pour toute intensive opérations de base de données, rapport de la construction, de la masse de l'analyse des données qui ont besoin de faire, procédures stockées gagner les mains dow
Envisager une table de base de données avec un million d'entrées, jointe à une autre table avec un million d'entrées... pensez-vous honnêtement pense que le faire sur le serveur (que ce soit dans LINQ ou ad-hoc SQL) va être plus rapide ou plus efficace que de laisser SQL Server de le faire sur la base de données?
Pour les requêtes simples, puis LINQ est évidemment mieux qu'elle sera pré-compilé, vous donnant l'avantage d'avoir une vérification de type , etc. Toutefois, pour toute intensive opérations de base de données, rapport de la construction, de la masse de l'analyse des données qui ont besoin de faire, des procédures stockées va gagner haut la main.