SQL la vitesse d'exécution de l'insert?
Je suis d'effectuer quelques test sur sql server et je veux obtenir le meilleur insérer vitesse possible.
La déclaration que j'utilise est quelque chose comme ceci:
INSERT INTO db_Test_databse..tbl_test with(rowlock)
( joinid, date_key,
col1, col2,col3,col4, col5, col6, col7, col8, col9, col10, ...
)
SELECT tabid as joinid,
date_key,
rec_type,
col2,
dbo.udf_convert_hex_to_dec(col3),
col4, col5, col6, col7, col8,
dbo.udf_convert_hex_to_dec(col9),
dbo.udf_convert_hex_to_dec(col10),
...
from source_table f
Il y a 25 colonnes; la plupart d'entre eux sont de type bigint ou int.
J'ai laissé tomber tous les index de la table de destination à l'exception de la clé primaire qui est un champ d'identité.
Des conseils sur la façon d'améliorer les performances de plus?
P. s. Dans ce formulaire, j'ai une vitesse moyenne de 16.000 lignes /sec.
dbo.udf_convert_hex_to_dec
est de vous tuer. La version de SQL Server que vous utilisez? Il y a built-ins pour faire cette conversion.- Je suis à la recherche étrangement à la
udf_convert_hex_to_dec
fonction. Les insertions ne peuvent être effectuées plus rapidement jusqu'à un certain point, certains facteurs sont des indices physiques et de performances. L'exécution d'une requête de l'analyseur contre elle, je parie que le select est la partie lente en raison de la fonction. - Fonctions Définies par l'utilisateur peuvent être lents. Pouvez-vous ne pas jeter de l'hex directement à la décimale - CAST (col9 COMME séparateur Décimal(4)) par exemple>?
- le coût de la sélection est de 9% du coût de la table de la bobine est de 32%, le cluster insérer les coûts de 58%
Vous devez vous connecter pour publier un commentaire.
Pour obtenir le le mieux possible rendement, vous devriez:
Sont de plusieurs clients de l'insertion d'enregistrements en parallèle? Si oui, alors vous devriez également consdier le verrouillage implications.
Noter que SQL Server peut suggérer des indices pour une requête donnée, soit par l'exécution de la requête dans SQL Server Management Studio ou via le Paramétrage Du Moteur De Base. Vous devez faire pour vous assurer que vous n'avez pas retiré un indice de SQL Server à l'aide d'accélérer le
INSERT
.Si ce n'est toujours pas assez rapide, alors vous devriez considérer le regroupement jusqu'insère une aide
BULK INSERT
à la place (ou quelque chose comme utilitaire bcp ouSqlBulkCopy
, qui utilisent tous deux desBULK INSERT
sous les couvertures). Cela vous donnera le débit le plus élevé lors de l'insertion de lignes.Voir aussi L'Optimisation De L'Importation En Bloc de beaucoup de conseils dans cet article s'applique également à la "normale" insère.
Avez-vous envisagé d'utiliser SqlBulkCopy? Vous avez besoin de construire une DataTable et le passer à la WriteToServer routine.
C'est RAPIDE!
vous pouvez utiliser dans votre magasin de la procédure avant la fin