Requêtes sargable dans sql server avec exemples

feature-sql1

La partie la plus intéressante de mon travail est l`optimisation des performances et optimisation dans T-SQL. Le cœur de l`optimisation des performances dans un serveur SQL est l`indexation correcte et utilisable sur les tables par le biais de l`utilisation de requêtes sargable.

Parfois, la base de données Développeur Senior au travail me dit juste pour ajouter un index à une colonne de xyz, car il est utilisé dans plusieurs clauses Where au sein de plusieurs requêtes SQL. C`est quand je dois calmer mon esprit. Si l`ajout d`un index sur la colonne de xyz pourrait résoudre tous les problèmes de performance, puis des milliers de livres auraient pas été publiés sur T-SQL optimisation des performances, et je serais allé la chasse pour anaconda dans la forêt amazonienne.

Sargable Requêtes (Recherche Argumentable)

En termes simples, les requêtes sargable sont ceux qui sont en mesure d`utiliser les index créés sur eux pour des recherches plus rapides et l`exécution d`une requête.
Une recherche plus rapide signifie faire un index efficace chercher un grand nombre de lignes et d`éviter les balayages d`index coûteux.

Index Seek - les requêtes sont en mesure d`utiliser des index de manière efficace et localiser des lignes avec moins d`effort de l`optimiseur de requêtes.
Index scan - la numérisation de la totalité de la table pour localiser les lignes pour satisfaire les critères de recherche

Ce qui fait une requête non-sargable (pas en mesure d`utiliser les index créés efficacement)?

1. l`utilisation des fonctions Où conditions de la clause (parce qu`une fonction est évaluée par rapport à chaque ligne qui force l`optimiseur de requêtes de ne pas utiliser l`index)
2. utilisant LIKE `% Proposition% »dans les requêtes de recherche de carte sauvage
3. effectuer un calcul arithmétique sur une colonne d`index dans une clause Where

Nous allons créer et remplir une table avec 0,1 millions de lignes pour voir comment faire des requêtes sargable.

Ce script prendrait du temps pour créer des données d`échantillonnage en fonction de votre configuration matérielle (3-5 minutes).

-- Créer une table avec clé primaireCRÉER TABLE EmployeeTest (id INT IDENTITÉ(1, 1) PRIMAIRE CLÉ,Salaire INT, DateOfBirth DATETIME, EmployeeName VARCHAR (80)) -ALLER-- Insérer des lignes avec des valeurs aléatoiresDÉCLARER @rangée INT -DÉCLARER @string VARCHAR (80), @longueur INT, @code INT-ENSEMBLE @rangée = 0-TANDIS @rangée < 100000 COMMENCERENSEMBLE @rangée = @rangée + 1-IF @rangée = 10000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 20000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 30000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 40000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 50000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 60000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 70000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 80000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 90000PRINT «Les lignes insérés:«+CONVERTIR (VARCHAR (20), @rangée )-SI @rangée = 100000PRINT `Fait, lignes insérés: «+CONVERTIR (VARCHAR (20), @rangée ) --- Construisez la chaîne aléatoireENSEMBLE @longueur = ROUND (80 * RAND (), 0) -ENSEMBLE @string = `` -TANDIS QUE @longueur > 0 COMMENCERENSEMBLE @longueur = @longueur - 1 -ENSEMBLE @code = ROUND (32 * RAND (), 0) - 6 -IF @code ENTRE 1 ET 26ENSEMBLE @string = @string + CHAR (ASCII (`une`) + @ Code 1) -AUTREENSEMBLE @string = @string + ``-FIN-- Prêt pour l`enregistrementENSEMBLE NOCOUNT SUR -INSÉRER DANS EmployeeTest VALEURS (ROUND (2000000 * RAND () + 10000,0),CONVERTIR(DATETIME, ROUND (60000 * RAND () - 30000, 9)), @ string)FINALLER
» » Requêtes sargable dans sql server avec exemples