Dans certaines circonstances, faire un INSERT INTO <tablename> (WITH TABLOCK)
sera plus rapide en raison d'une journalisation minimale. Ces circonstances incluent la présence de la base de données dans le BULK_LOGGED
modèle de récupération.
Existe-t-il un autre avantage potentiel en termes de performances à utiliser WITH TABLOCK
sur une INSERT
table vide lorsque la base de données ( tempdb ) utilise le SIMPLE
modèle de récupération?
Je travaille avec SQL Server 2012 Standard Edition.
Mon cas d'utilisation consiste à créer puis à remplir immédiatement une table temporaire dans une procédure stockée à l'aide d'un INSERT...SELECT
, qui pourrait contenir jusqu'à quelques millions de lignes. J'essaie d'éviter ce genre d' abus de tempdb , mais c'est parfois nécessaire.
J'essaie de construire un cas à exiger TABLOCK
. Il ne semble pas que cela nuirait à quelque chose et pourrait avoir un avantage. J'essaie de comprendre s'il y a suffisamment d'avantages potentiels pour l'ajouter partout dans notre base de code, où je suis sûr qu'il n'y a aucun autre processus qui souhaite écrire dans la table.
J'insère généralement dans une table temporaire locale nouvellement créée avec un PK en cluster, mais j'utilise parfois un tas.