Ai-je besoin d'AUCUNE SERRURE dans ma CRÉER la Vue de requête
Je suis en création d'un affichage sur un Serveur MS SQL. Je n'ai pas eu beaucoup d'exposition à MS SQL et je ne suis pas réel familier avec l'indicateur de VERROUILLAGE. Je comprends ce qu'il fait, mais je ne sais pas si je dois l'utiliser dans ma situation. J'ai demandé si je devrais l'inclure et je ne sais pas.
Ai-je besoin d'ajouter AUCUN INDICE, après toutes les questions que je suis à l'aide pour créer mon point de vue? Ou qui ont une incidence sur l'utilisateur interrogeant la vue elle-même? L'UTILISATEUR doit ajouter le PAS de VERROUILLAGE de la requête sur la VUE?
Des conseils sur la meilleure approche et une clarification est apprécié!
stackoverflow.com/questions/210171/...
La conception de votre base de données et ses requêtes correctement de sorte que vous n'avez pas besoin
Sauf que je n'ai pas de conception de la base de données. Et c'est peut-être que tout le monde avant de me mettre juste PAS de SERRURE sur tout, sans comprendre ce qu'il fait. C'est pourquoi j'ai demandé à ce que serait la bonne chose à faire. Je remercie à l'avance de l'aide et je ne mettrai pas le PAS de SERRURE sur ma requête sous-jacente, car je ne pense pas que ces utilisateurs seront à l'aide de l'afficher dans une manière que les données vont changer, car ils sont à la recherche à elle, mais je te confirme qu'.
Juste pour ce que ça vaut, je suis en désaccord sur NOLOCK être un signe de quelqu'un qui ne sait pas ce qu'ils font. Certains de la plus forte DBA je sais l'utiliser régulièrement dans les bons endroits, bien sûr. J'ai rencontré beaucoup de scénarios au cours des années où je pourrais facilement vivre avec le compromis de quelques miscounted enregistrements si je peux éviter de prendre une table de clés en mode hors connexion (par exemple, si mon agrégation de requête s'aggrave pour un verrou de table). Ce n'est certainement pas tous les scénarios, mais j'ai couru dans cette situation assez souvent que je suis convaincu qu'une telle déclaration générale n'est pas très utile.
La conception de votre base de données et ses requêtes correctement de sorte que vous n'avez pas besoin
WITH (NOLOCK)
. Je vous promets que vous ne voulez pas vraiment sale lit--pourquoi voudriez-vous laisser la possibilité d'obtenir fantôme lignes qui n'a même jamais existé dans la base de données? La meilleure approche est de travailler avec soin afin de minimiser le temps que tous les verrous de tout genre aura lieu sur les lignes--y compris les verrous en lecture. Cette bonne table et l'index de la conception et cohérente de mise à jour/insérer/supprimer des modèles de l'application. L'utilisation libérale de SET TRANSACTION ISOLATION LEVEL READ UNCOMMMITTED
et NOLOCK
est un signe d'un novice.Sauf que je n'ai pas de conception de la base de données. Et c'est peut-être que tout le monde avant de me mettre juste PAS de SERRURE sur tout, sans comprendre ce qu'il fait. C'est pourquoi j'ai demandé à ce que serait la bonne chose à faire. Je remercie à l'avance de l'aide et je ne mettrai pas le PAS de SERRURE sur ma requête sous-jacente, car je ne pense pas que ces utilisateurs seront à l'aide de l'afficher dans une manière que les données vont changer, car ils sont à la recherche à elle, mais je te confirme qu'.
Juste pour ce que ça vaut, je suis en désaccord sur NOLOCK être un signe de quelqu'un qui ne sait pas ce qu'ils font. Certains de la plus forte DBA je sais l'utiliser régulièrement dans les bons endroits, bien sûr. J'ai rencontré beaucoup de scénarios au cours des années où je pourrais facilement vivre avec le compromis de quelques miscounted enregistrements si je peux éviter de prendre une table de clés en mode hors connexion (par exemple, si mon agrégation de requête s'aggrave pour un verrou de table). Ce n'est certainement pas tous les scénarios, mais j'ai couru dans cette situation assez souvent que je suis convaincu qu'une telle déclaration générale n'est pas très utile.
OriginalL'auteur Leslie | 2013-04-23
Vous devez vous connecter pour publier un commentaire.
Je vais répondre à votre première question.
Il est préférable d'avoir de la NOLOCK information sur la vue de l'extérieur plutôt que sur les tables de la vue.
Par exemple
ou
Le faisant de cette manière vous que le créateur est la restauration pour une plus large base d'utilisateurs qui peuvent ou peuvent ne pas être aussi expérimenté à SQL comme toi-même. Par le pas de l'encapsulation NOLOCK dans la vue encourage les autres développeurs de vraiment réfléchir à la façon dont ils aimeraient récupérer les données de manière sûre et efficace.
Maintenant plus d'info sur NOLOCK. C'est un bon truc si vous êtes sûr à 100% les données sous-jacentes ne change plus, en est un bon exemple quand un ETL système a terminé le chargement de données pour la journée. Il est également utile en lecture seule du système de déclaration et là encore, vous êtes sûr il n'y a pas de mouvement de données entre le rapport s'exécute.
Sinon, il n'est pas recommandé de faire allusion à utiliser dans votre système. Il ne fait plus de mal que de bien si vous n'avez pas vraiment à comprendre les implications.
Veuillez consulter les liens suivants pour les dommages NOLOCK peut provoquer:
Déjà commis des lignes peut être manqué si l'indicateur NOLOCK est utilisé
Timebomb - Le problème de Cohérence avec NOLOCK /READ UNCOMMITTED
OriginalL'auteur Louie Bao
Directement à partir de la Doc:
L'indicateur NOLOCK, en particulier, est une notoirement pernicieuse et mauvaise idée. Il ne doit être utilisé que dans des circonstances particulières et spécifiques besoins: par Exemple lorsque vous n'êtes pas concerné si les données retournées sont correctes.
OriginalL'auteur RBarryYoung