Meta tags:
description= Chapitre 08 - Optimiser le code SQL;
Headings (most frequently used words):
les, de, table, sql, plan, exécution, indicateurs, requête, et, optimiser, le, code, gestion, des, dynamique, lire, un, principaux, opérateurs, algorithmes, jointure, avancée, plans, son, tables, temporaires, pour, ou, contre, éviter, curseurs, optimisez, vos, déclencheurs, récupérer, vues, débordements, hachages, guides, écriture, ensembliste, comparaisons, filtres, grandeur, misère, fonctions, utilisateur, compter, lignes, une, vaut, il, mieux, utiliser, variables, type, limiter, pollings, avec, notifications, récursivité, mises, jour, tag, cloud, categories,
Text of the page (most frequently used words):
les (263), une (262), est (252), dans (211), des (181), pour (148), plan (147), table (134), sql (128), par (121), sur (110), vous (105), qui (98), que (98), select (90), #requête (88), from (83), exécution (82), lastname (76), nous (73), index (73), plus (67), sont (64), server (58), lignes (57), person (56), code (55), pas (52), exemple (51), avec (49), être (46), cette (45), contact (44), where (43), donc (42), peut (41), même (41), opérateur (41), firstname (40), comme (39), nombre (36), ligne (35), type (35), tables (30), colonne (30), recherche (30), instruction (29), deux (29), requêtes (27), set (27), colonnes (27), force (27), mais (26), elle (26), clause (26), plans (26), contactid (26), ces (25), très (25), fonction (25), scan (25), performances (25), utiliser (23), join (23), aussi (23), xml (23), pouvez (22), sous (21), données (21), cas (21), opérateurs (21), procédure (21), avons (20), transaction (20), cet (20), figure (20), sys (20), clustered (20), votre (19), doit (19), and (19), null (19), résultat (19), après (19), tempdb (19), chaque (19), jour (18), trigger (18), elles (18), sans (18), valeur (18), variable (18), fait (18), dbo (18), clé (18), indicateurs (18), update (17), déclencheur (17), sera (17), bien (17), order (17), fig (17), optimiseur (17), hash (17), permet (16), insert (16), soit (16), estimé (16), jointure (16), niveau (16), dynamique (16), showplan (16), son (15), autre (15), exec (15), option (15), leur (15), cache (15), base (15), utilisation (15), guide (15), partir (14), non (14), name (14), aide (14), syntaxe (14), éviter (14), cela (14), declare (14), compilation (14), spool (14), moteur (14), première (14), utilisé (14), indicateur (14), événement (13), query (13), événements (13), serveur (13), utile (13), souvent (13), sales (13), faire (13), ensembliste (13), avant (13), toute (13), simple (13), ainsi (13), paramètre (13), nom (13), hachage (13), begin (12), for (12), possible (12), jeu (12), delete (12), moins (12), fonctions (12), mise (12), été (12), rollback (12), réel (12), statistiques (12), coût (12), voir (12), optimisation (12), stockée (12), calcul (12), lookup (12), opération (11), tout (11), exécuter (11), ensuite (11), section (11), ordre (11), expression (11), group (11), choix (11), selon (11), création (11), mémoire (11), aggregate (11), optimiser (11), tous (10), lui (10), objets (10), with (10), utilisateur (10), déclencheurs (10), dire (10), celui (10), intérieur (10), filtre (10), ils (10), erreur (10), version (10), différence (10), travail (10), int (10), humanresources (10), middlename (10), liste (10), isolation (10), format (10), client (9), fromdate (9), currencycode (9), peuvent (9), expressions (9), alors (9), into (9), curseurs (9), avez (9), 2005 (9), affichage (9), statistics (9), tri (9), performance (9), union (9), not (9), employeeid (9), dont (9), langage (9), currentcontactid (9), voyons (9), plusieurs (9), taille (9), opérations (9), count (9), lorsque (9), loop (9), graphique (9), simplement (8), objet (8), entrée (8), effectuer (8), modification (8), partie (8), vue (8), retourne (8), instructions (8), ont (8), car (8), affiche (8), create (8), fois (8), ici (8), générer (8), top (8), trouvez (8), th1 (8), généré (8), varchar (8), temporaire (8), temps (8), parce (8), forcer (8), variables (8), emailaddress (8), suffix (8), résultats (8), stratégie (8), trace (8), guides (8), algorithme (8), nested (8), besoin (7), end (7), todate (7), voici (7), revanche (7), celle (7), gestion (7), session (7), ceci (7), ssms (7), verrous (7), row_number (7), notre (7), testloop (7), créer (7), méthode (7), fenêtrage (7), permettent (7), boucle (7), curseur (7), rapide (7), employee (7), appel (7), effectuée (7), cross (7), jointures (7), while (7), possibilité (7), utilisant (7), obtenir (7), estimation (7), trois (7), like (7), valeurs (7), abord (7), modifier (7), getcontactsforplanguide (7), mldr (7), quand (7), merge (7), bookmark (7), informations (6), notifications (6), aux (6), vérifier (6), toutes (6), autant (6), virtuelles (6), ses (6), mises (6), deleted (6), match (6), transactions (6), pratique (6), toujours (6), verrez (6), stockées (6), seule (6), nvarchar (6), recompilation (6), vos (6), groupe (6), faut (6), cte (6), autres (6), peu (6), all (6), contre (6), cur (6), administration (6), notamment (6), read (6), seconde (6), entre (6), haut (6), contrainte (6), doivent (6), relationnel (6), façon (6), unique (6), commande (6), étant (6), compute (6), scalar (6), seek (6), utilise (6), structure (6), vues (6), indique (6), granularité (6), readpast (6), distribution (6), auto (6), puis (6), flèches (6), travers (5), effectue (5), automatiquement (5), return (5), between (5), utilisés (5), bon (5), bonne (5), déclenche (5), début (5), depuis (5), écriture (5), versions (5), contient (5), fonctionne (5), row (5), procédures (5), provoque (5), important (5), effet (5), lors (5), suivante (5), over (5), pouvons (5), réaliser (5), créé (5), key (5), information (5), propriétés (5), nécessaire (5), transactionid (5), produire (5), phrase (5), général (5), compte (5), présence (5), remplacer (5), passer (5), deuxième (5), livre (5), argument (5), correspond (5), utilisée (5), microsoft (5), temporaires (5), lorsqu (5), dit (5), retour (5), mieux (5), reads (5), cardinalité (5), stream (5), puisque (5), getcountcontacts (5), scalaire (5), règle (5), quelques (5), coûteux (5), retournées (5), logique (5), syntaxes (5), phase (5), faite (5), optimize (5), hints (5), utiles (5), détail (5), verrons (5), algorithmes (5), agrégation (5), parcours (5), enfant (5), nonclustered (5), batch (5), apply (5), texte (5), profile (5), commandes (5), flèche (5), place (4), bol (4), contenu (4), utilisez (4), fonctionnalité (4), application (4), site (4), inserted (4), rowcount (4), permettant (4), devez (4), triggers (4), exécute (4), traiter (4), principaux (4), output (4), afficher (4), plutôt (4), visible (4), inutile (4), dangereux (4), principalement (4), idée (4), dml (4), currency (4), affectées (4), aucun (4), jusqu (4), externe (4), garantie (4), explicite (4), réalité (4), contexte (4), disponibles (4), deleteddate (4), sgbdr (4), premier (4), demande (4), voyez (4), system_objects (4), représentation (4), 2008 (4), th2 (4), mot (4), compter (4), str (4), boucles (4), plupart (4), mêmes (4), présenter (4), main (4), hoc (4), adams (4), source (4), execute (4), exécutée (4), permettre (4), aucune (4), verrouillage (4), suffit (4), déjà (4), vaut (4), total (4), comprendre (4), pourquoi (4), pages (4), cpu (4), cnt (4), façons (4), chercher (4), programmeur (4), rien (4), clés (4), choisi (4), retournent (4), droite (4), certaines (4), également (4), stockage (4), arbre (4), abercrombie (4), verrou (4), serializable (4), lire (4), récupérer (4), doublons (4), allons (4), consiste (4), propriété (4), collapse (4), split (4), lookforphysicalops (4), query_plan (4), dm_exec_query_plan (4), text (4), session_id (4), affichent (4), vont (4), info (4), bulle (4), rudi (3), bruchez (3), expertise (3), lequel (3), seront (3), références (3), changé (3), référence (3), readuncommitted (3), nocount (3), attention (3), ensemble (3), optimal (3), comportement (3), appelée (3), trop (3), estimées (3), complexes (3), portant (3), existe (3), déclenché (3), after (3), avoir (3), currencyarchive (3), disponible (3), reconfigure (3), sp_configure (3), options (3), désactiver (3), indiquent (3), quelles (3), quel (3), appelant (3), annule (3), faites (3), serait (3), créés (3), sauf (3), off (3), relativement (3), chaîne (3), jamais (3), 3609 (3), afin (3), via (3), lectures (3), showplan_xml (3), recherches (3), relatif (3), interne (3), supprimées (3), entendu (3), supprimée (3), values (3), tel (3), uniquement (3), ensemblistes (3), certains (3), veut (3), mis (3), recompilations (3), système (3), quelle (3), difficile (3), rownumber (3), ctetestloop (3), exactement (3), encore (3), solution (3), ctl (3), raison (3), problème (3), néanmoins (3), physique (3), potentiellement (3), fil (3), efficace (3), spécifique (3), article (3), hierarchyid (3), boss (3), près (3), chose (3), employeecte (3), actualcost (3), production (3), nombres (3), citations (3), comment (3), parcourir (3), passage (3), moyens (3), construction (3), pourrions (3), analyser (3), parfois (3), sécurité (3), statique (3), respectivement (3), solutions (3), searchcontactsdynamique (3), searchcontactsstatique (3), vient (3), envoi (3), charge (3), 8000 (3), écrire (3), traditionnelle (3), page (3), combinaison (3), vide (3), insertion (3), montre (3), tran (3), sysname (3), lié (3), déclaration (3), primaire (3), appliquer (3), lesquelles (3), révéler (3), performant (3), ressources (3), écrite (3), valable (3), obligé (3), object (3), lecture (3), déclarative (3), contacts (3), aller (3), titre (3), empêche (3), opérandes (3), seulement (3), constant (3), condition (3), filtres (3), opérande (3), changement (3), étape (3), étrangère (3), créent (3), modèle (3), address (3), indexée (3), gauche (3), actuelle (3), relationnelle (3), clauses (3), apparition (3), durant (3), suivants (3), sort (3), exécutions (3), nœud (3), sp_control_plan_guide (3), types (3), défaut (3), suivant (3), chapitre (3), imbriquée (3), conversions (3), schéma (3), installation (3), showplanxml (3), dernier (3), paramétrage (3), moyenne (3), indiquer (3), maximum (3), parallelism (3), donne (3), cost (3), maxdop (3), indiqué (3), devraient (3), considérer (3), complet (3), débordements (3), hachages (3), triées (3), extraire (3), vers (3), xquery (3), triée (3), présent (3), feuille (3), seul (3), bas (3), prédicat (3), lazy (3), celles (3), execution (3), extraction (3), représente (3), plan_handle (3), dm_exec_sql_text (3), compile (3), donnent (3), historiques (3), détruites (3), souris (3), threads (3), représenté (3), produit (3), docs (3), maintenance (3), alwayson (3), diagnostic (3), journaux (3), trouverez (2), basé (2), natif (2), rarement (2), sûr (2), vérification (2), profiter (2), web (2), limiter (2), pollings (2), dates (2), historique (2), chevauchent (2), currencyhistory (2), exists (2), alter (2), devra (2), contraintes (2), contenir (2), contrôles (2), passant (2), check (2), enfin (2), exécutant (2), voulez (2), réellement (2), placé (2), fine (2), current_timestamp (2), currency2 (2), but (2), légère (2), show (2), advanced (2), disallow (2), results (2), présents (2), renvoie (2), notez (2), intéressent (2), atr_d (2), archive (2), tester (2), pure (2), sauvegarde (2), nom_du_point (2), save (2), suivre (2), validé (2), envoyée (2), évitez (2), déclenchement (2), copie (2), store (2), suivi (2), retrouver (2), méfiez (2), correctement (2), implémentent (2), penser (2), terme (2), systématique (2), modifiant (2), court (2), augmente (2), existent (2), ddl (2), entrent (2), optimisez (2), importe (2), astuce (2), bricolage (2), surtout (2), partition (2), partitionnement (2), sûre (2), pourriez (2), capacité (2), gérer (2), implique (2), description (2), exemples (2), organization (2), employeename (2), donner (2), complexe (2), implémenté (2), classe (2), net (2), stocker (2), hiérarchie (2), malgré (2), calculée (2), managerid (2), 100 (2), cast (2), récursivité (2), était (2), common (2), transactiondate (2), 20030901 (2), transactionhistory (2), sum (2), essayer (2), toutefois (2), petits (2), totaux (2), cumulés (2), courant (2), volée (2), nouvelle (2), len (2), substring (2), auteur (2), homme (2), gens (2), concaténation (2), déclaratif (2), nécessaires (2), print (2), next (2), fetch (2), fetch_status (2), fast_forward (2), remplacement (2), intéressant (2), simples (2), meilleure (2), prendre (2), soient (2), préférable (2), viole (2), numéro (2), conservé (2), multiples (2), défauts (2), intéressante (2), inséré (2), essayons (2), appels (2), formulaire (2), révèle (2), règles (2), privilèges (2), contenus (2), risques (2), soyez (2), intégré (2), sorte (2), avantages (2), left (2), reçoit (2), filtrer (2), pratiquement (2), critères (2), sujet (2), évaluer (2), conclusion (2), utilisons (2), insérées (2), évidemment (2), impliquant (2), master (2), sysobjects (2), use (2), impossible (2), volumineuses (2), beaucoup (2), baser (2), absence (2), consomme (2), dure (2), propre (2), contenue (2), moment (2), certaine (2), apparaître (2), métadonnées (2), information_schema (2), démontrer (2), introduit (2), renvoyer (2), logical (2), dm_db_partition_stats (2), index_id (2), object_id (2), row_count (2), outer (2), nix (2), person_contact (2), trouve (2), nouveau (2), décidée (2), lit (2), 000 (2), 125 (2), ackerman (2), function (2), créons (2), noms (2), famille (2), modulariser (2), lieu (2), calculs (2), paraît (2), mauvaise (2), retourner (2), defined (2), grandeur (2), misère (2), entraîner (2), tant (2), sélection (2), prenons (2), constantes (2), fixe (2), choses (2), sarg (2), collation (2), présente (2), assurer (2), appuyer (2), nécessairement (2), addressid (2), recherchée (2), choisir (2), sélectivité (2), estimations (2), dépend (2), testez (2), comparaisons (2), heure (2), choisissez (2), intuitive (2), stratégies (2), signifie (2), procédurale (2), finalement (2), ensembles (2), algèbre (2), manière (2), améliorer (2), premiers (2), distinct (2), grande (2), descriptive (2), précise (2), libraire (2), coller (2), voie (2), plan_guides (2), event (2), operation (2), drop (2), pire (2), parameter (2), sniffing (2), optimizeforall (2), sp_create_plan_guide (2), procedure (2), parameterization (2), directement (2), exclusif (2), pose (2), strictement (2), équivalent (2), holdlock (2), nolock (2), uncommitted (2), beurre (2), quatre (2), read_committed_snapshot (2), versioning (2), committed (2), critère (2), noexpand (2), listons (2), exécutées (2), partout (2), élément (2), supprimé (2), provoquer (2), ressort (2), calculer (2), jacentes (2), considérés (2), changements (2), keepfixed (2), keep (2), mal (2), extrêmes (2), variable_name (2), unknown (2), rappelons (2), parallélisation (2), parallélisme (2), activer (2), désactivé (2), processeurs (2), indexation (2), génération (2), différents (2), entière (2), agit (2), objectif (2), customerid (2), forçant (2), certain (2), fin (2), ajoutant (2), logiques (2), physiques (2), avancée (2), warnings (2), agrégations (2), estimée (2), crée (2), parcourt (2), comparaison (2), importants (2), rapidement (2), fusion (2), correspondance (2), testées (2), imbriquées (2), volumes (2), joindre (2), retournée (2), heap (2), provenant (2), sélectionnées (2), sequence (2), identifiant (2), formes (2), particulières (2), rid (2), remote (2), créée (2), calculées (2), testée (2), comparées (2), filter (2), eager (2), séquence (2), entreprise (2), batchsequence (2), statements (2), http (2), schemas (2), com (2), sqlserver (2), 2004 (2), default (2), sql_handle (2), trouver (2), blog (2), dm_exec_requests (2), start_time (2), status (2), command (2), éliminer (2), spid (2), cours (2), profiler (2), binaire (2), contiennent (2), objectid (2), integerdata (2), binarydata (2), completed (2), starting (2), textdata (2), sqlhandle (2), recompilé (2), octets (2), grâce (2), compilées (2), éléments (2), détaillé (2), envoyées (2), 973 (2), parlerons (2), forcé (2), épaisses (2), petit (2), visuellement (2), fines (2), parallèle (2), parallélisé (2), indiquant (2), envoyé (2), fenêtre (2), affiché (2), fichier (2), extension (2), barre (2), outils (2), ctrl (2), qualité (2), graphe (2), implicites (2), problèmes (2), 2025 (2), shrink (2), sargabilité (2), journal (2), architecture (2), compteurs (2), sauvegardes (2), always (2), français (2), droits, réservés, 2026, services, contactez, moi, parlons, projet, gestionnaire, using, sqldependency, service, broker, applications, abonner, envoyés, changent, régulières, aurait, snac, sqlncli, mettre, chargées, native, raiserror, atr_iu, sales_currencyhistory, checkconsistency, validité, présuppose, acceptent, probablement, hors, tricher, ajoutons, cohérence, préférez, instant, traité, corps, basant, réorienter, intérêts, réécrire, before, instead, archivage, rediriger, songez, rend, cliente, parasitée, recordset, indésirable, renvoi, malencontreusement, interragit, référez, mentionnée, servez, mentionnées, columns_updated, sales_currency2, perte, frf, fera, prudent, mécanisme, points, effectivement, oubliez, dehors, fermera, éventuels, cursor_close_on_commit, insensitive, static, souhaitez, mesure, déclenchant, gère, égal, sortie, apparaît, exécuté, intérêt, déclencher, sens, commit, trancount, annuler, déclenchante, envoie, avertir, placer, bloc, try, catch, soir, feront, particuliers, massivement, modifiées, provoquera, activité, gérées, considéré, logiquement, ajoutées, fréquente, vidée, inscrite, smalldatetime, nchar, sales_currency, commun, opposition, déclenchent, essentiel, per, point, comportent, rappel, réutilisé, garder, prolonge, durée, exécutent, structures, cadre, aborderons, blocs, exécutés, obligatoirement, imiter, garantir, correct, facile, recommencer, numérotation, compliqué, officielle, raisons, contourner, limitation, précisément, regroupement, implémentation, documentée, consistante, primary, identity, affecter, mélanger, affectation, forme, détournée, évitera, dernière, structuration, intervallaire, frédéric, brouard, working, data, getroot, isdescendantof, getancestor, getlevel, level, dessus, disposez, méthodes, indexer, récursif, descendre, classique, employé, manager, récusrives, connaissait, profondeur, résout, totalcumule, précision, découpage, lisez, rencontré, citation, mots, system_views, tally, newid, charindex, nullif, mécontents, pauvres, réfléchissent, talleyrand, ennuyeux, incapable, ennuyer, cioran, généralement, guitry, 1000, séparations, pivots, coalesce, max, caractéristique, profit, final, séquentielle, finir, break, deallocate, close, open, cursor, traitement, révèlent, efficaces, traitements, vérifications, remplacés, récrire, différent, rencontre, automatiser, maintenances, acceptable, tenu, fréquence, fenêtres, favorables, rencontrer, manque, connaissance, possibilités, décision, eux, optimisables, pensons, only, circuite, ennemi, public, séquentiellement, côté, comportant, reste, lisibilité, figures, adapté, parlante, gagne, cachehit, nommées, proposées, réutilisation, écueil, tombons, accompagnement, quoi, agir, inconvénient, avantage, obéit, chaînage, propriétaires, termes, vérifiés, autorisé, injection, malicieux, utilisaeur, ayant, prudents, injections, prévenir, quelque, précompilation, évaluation, prises, internaute, saisir, arguments, prend, imaginons, multi, produits, particulière, fréquemment, construire, débat, dynamiquement, ute, recommande, précisons, intéressantes, petite, laquelle, insérons, annulation, annulée, bénéfique, codez, risquez, inattendus, expérimenter, enrôlées, part, possibles, utilisées, regardant, 1763, resources, statistique, zéro, productif, inconvénients, oui, maintenir, moindre, journalisée, constater, enrôlée, validée, privée, fn_dblog, gain, apporté, limité, réside, atteint, séparez, tests, ressemblant, 04ca11fe, entendrez, vit, erroné, assigne, 2000, transact, facilité, déclarées, restent, buffer, atteignent, nécessite, disque, sysidxstats, filtrée, démonstration, êtes, expérience, right, pk_contact_contactid, incluant, décortiquer, regardons, nettoyé, faciliter, nature, violée, impliquée, entrer, séparé, moyen, lier, forçons, huit, secondes, millisecondes, 1200, lues, tracé, observons, différences, gardons, inclure, profitons, returns, reprenant, réutiliser, circonstances, songer, serions, tentés, sembler, rêve, diminution, redondant, modularisation, répétitive, encapsuler, udf, user, functions, provoquent, plage, manier, précaution, grand, égalité, offre, pourtant, compilateur, transformer, arithmétiques, capable, contenant, simplifier, connue, folding, sargable, efficacement, annuaire, connaissant, premières, lettres, lili, alameda, jim, nez, écrivez, alamedalili, latin1_general_ci_ai, jimenez, collate, appelle, évalué, stocké, empêchera, forcera, conséquent, search, impératif, mère, déportée, fille, mères, indexées, générale, liées, telle, définition, bénéficient, effectuent, employeeaddress, addressline1, postalcode, city, montrent, quoiqu, considérez, présentes, êtres, exprimées, ternaire, vrai, faux, inconnu, composées, absolue, disons, évolue, améliore, futur, probable, finisse, dépasser, déduire, clarté, anciennes, connues, chance, bénéficier, optimisations, solides, performante, nécessité, environ, 200, écrit, voulons, personnes, utilité, balancer, bannir, introduites, pivot, optimales, forcent, proches, fonctionnement, considérations, pur, 19973, déclaratives, triste, définissent, travaillent, entorses, hérésie, tuples, relation, précis, ordré, théorie, influant, tris, coûteuses, influe, importance, décomposée, récrite, having, lisible, légèrement, différente, identique, considérant, faible, volumétrie, 290, faits, derniers, identiques, incluent, normaliser, équivalentes, produisent, presque, bijou, algorithmique, connaissances, dispose, qualifié, tâche, ailleurs, forciez, prendrait, allez, librairie, commander, demandez, ouvrage, dites, catalogue, livres, distribués, noter, isbn, souhaite, copier, programme, inscrire, mon, merci, imprimer, parvenir, postale, distributeur, éditions, purement, prénoms, triés, prénom, title, cohérent, maître, décrit, désiré, enregistrés, courante, échoué, explorateur, programmability, unsuccessful, successful, disable, supprimer, prenant, générique, scénario, désagréable, profiteraient, cause, limitera, dégâts, sélectif, utilisera, défavorable, provoquant, suppression, params, module_or_batch, stmt, spécifiez, autoparamétrage, template, créez, modifiez, désactivez, activez, xlock, updlock, tablockx, partagé, tablock, normalement, escalade, larges, posés, rowlock, repeatable, repeatableread, attendre, libération, incompatibles, incomplète, obtient, argent, forcément, cinq, mode, readcommittedlock, readcommitted, paglock, désactive, attente, verrouillée, immédiatement, nowait, index_val, forceseek, touchent, abordons, succintement, entrant, ajoutent, laisser, respecteront, forceplan, envoyez, unicode, devant, littéral, caractère, indésirables, enregistrement, pouvoir, répertoire, xsd, référencé, modifiée, ultérieur, invalide, connaissez, meilleur, antérieure, dégradé, marbre, xml_plan, limite, récursifs, récursive, maxrecursion, nombre_de_récursions, satisfaire, inverse, seuls, expand, views, diminue, dûes, six, dûe, cachant, individuellement, diminuer, produites, forced, recompile, spécifier, risque, hétérogène, sélectives, choisie, considérée, paramètres, ajoute, souplesse, distribuée, représentative, optimisé, donnée, déjouer, pièges, literal_constant, définie, degree, attribuer, coûteuse, paralléliser, threshold, machine, impliqué, nombre_de_processeurs, structurel, changer, pourra, soupçon, ordres, gagnante, spécifie, détriment, double, tranchant, empirer, garantit, conséquence, goal, optimisée, poursuivre, pagination, fast, nombre_de_lignes, rares, exceptions, sait, concat, territoryid, customeraddress, customer, garde, tâcher, expliquer, comporter, intéressants, disposition, préférée, voire, prédéfini, disparu, génère, répéter, fonctionnalités, savez, conscient, répercutions, revue, spécifiques, résolution, appliquant, agrégat, regroupements, renvoyée, processor, could, produce, because, the, this, détecter, dûs, errors, warning, débordement, ralentit, nettement, sqlos, réserve, quantité, optimiste, pendant, baver, parle, spilling, souffre, désavantages, bloquant, complètement, terminée, travailler, eau, consommateur, équijointures, phases, premièrement, privilégié, jeux, préparation, grosses, ordonnées, nœuds, feuilles, préalable, équijointure, comparer, égalités, correspondances, conservée, suivantes, exprimés, lookups, proportionnellement, schématiser, rechercher, cherchait, second, implémente, udx, retournant, traitée, valued, provient, précéder, proriétés, sauve, intermédiaire, parcourues, opère, norme, implémentée, servent, sequenceproject, segment, distant, serveurs, distants, obsolètes, linked, normalise, intervalles
Text of the page (random words):
ble fille c est à vous de le faire et c est pratiquement une étape nécessaire pour assurer la bonne performance des requêtes de jointure pour qu une expression de filtre utilise l index il est impératif que la colonne soit présente comme opérande sans aucune modification c est ce qu on appelle un sarg search argument un seek d index ne peut être évalué comme possibilité que sur une opérande de type sarg c est à dire qui correspond exactement à ce qui est stocké dans la clé de l index toute modification de colonne dans l expression comme par exemple une concaténation un passage dans une fonction ou un changement de collation à la volée empêchera toute utilisation d index et forcera par conséquent le scan c est donc à éviter exemples de choses à ne pas faire select firstname lastname from person contact where lastname collate latin1_general_ci_ai jimenez select firstname lastname from person contact where left lastname 2 ag select firstname lastname from person contact where lastname firstname alamedalili à la place écrivez vos filtres comme ceci select firstname lastname from person contact where lastname like jim eé nez select firstname lastname from person contact where lastname like ag select firstname lastname from person contact where lastname alameda and firstname lili l opérateur like permet l utilisation de l index à condition que le début de la chaîne soit fixe il correspond ainsi au début de la clé de l index et est donc sargable comme on peut chercher efficacement dans un annuaire en ne connaissant que les quelques premières lettres d un nom cette règle est valable aussi pour les opérations arithmétiques sql server n est pas capable de modifier une expression contenant des opérations sur des constantes pour la simplifier une opération connue en compilation sous le nom de constant folding prenons un exemple select from person contact where contactid 3 34 select from person contact where contactid 37 il n est pas très difficile pour un compilateur de transformer automatiquement la première clause en la seconde pourtant sql server ne le fait pas comme nous le voyons dans les plans d exécution en figure 8 11 fig 8 11 différence de plans d exécution la règle à suivre est donc celle ci une des deux opérandes doit être la colonne seulement la colonne et rien que la colonne dans la liste des opérateurs disponibles l égalité est le plus utilisé c est celui qui offre le plus de possibilité d optimisation par un index l opérateur de différence est souvent le moins efficace non pas parce qu il empêche en tant que tel l utilisation d un index mais parce qu il provoque souvent la sélection d un nombre important de lignes en réalité les opérateurs qui provoquent une recherche de plage sont à manier avec précaution car ils peuvent entraîner le retour d un grand nombre de lignes ces opérateurs sont between et grandeur et misère des fonctions utilisateur les fonctions utilisateur user defined functions udf sont des objets de code au même titre que les procédures stockées et les déclencheurs leur travail est de retourner une valeur scalaire ou une table au code t sql appelant elles peuvent sembler très pratique au premier abord car elle permettent de réaliser le rêve de tout programmeur la diminution du code redondant par modularisation avons nous besoin de faire une recherche répétitive sur une table pourquoi ne pas encapsuler cette recherche dans une fonction parce que ce qui paraît à première vue une bonne idée pour le programmeur se révèle une très mauvaise idée pour un sgbdr nous pourrions songer à modulariser notre code de la façon suivante au lieu d utiliser des sous requêtes ou des jointures nous serions tentés d aller chercher les valeurs ou les calculs qui nous intéressent à l aide d une fonction en reprenant notre exemple du compte de noms de famille essayons de modulariser le code pour réutiliser ce calcul dans toutes circonstances nous créons alors la fonction suivante create function person getcountcontacts lastname nvarchar 50 returns int as begin return select count from person contact where lastname like lastname end nous profitons ainsi d une fonction qui retourne le compte des contacts pour toute la table paramètre par début de nom paramètre a par exemple ou par nom paramètre ackerman par exemple select person getcountcontacts select person getcountcontacts a select person getcountcontacts ackerman pratique non peut être dans ce contexte là mais gardons nous d inclure cette fonction dans la clause select d une requête observons les différences de performances entre trois façons d obtenir les mêmes résultats select avec utilisation de la fonction select t firstname t lastname person getcountcontacts t lastname as cnt from person contact t select avec sous requête select t firstname t lastname select count from person contact where lastname t lastname cnt from person contact t nous avons tracé ces requêtes voyons le résultat sur la figure 8 12 fig 8 12 trace des requêtes la requête utilisant la fonction dure huit secondes et lit près de 46 000 pages alors que la solution avec sous requête une seconde 125 millisecondes de temps cpu pour 1200 pages lues la différence est sans appel pourquoi parce qu avec la fonction nous forçons sql server à utiliser la stratégie de requête que nous avons décidée pour chaque ligne de la table person contact impliquée dans la requête sql server doit entrer dans la fonction et exécuter la requête qui s y trouve à nouveau puisque nous avons séparé le code en deux objets l optimiseur n a aucun moyen de lier les deux requêtes pour comprendre ce qu on veut obtenir ainsi la nature déclarative du langage sql est violée en revanche en incluant avec une sous requête les deux opérations dans la même requête l optimiseur a tout en main pour la décortiquer la comprendre et l optimiser regardons le plan d exécution un peu nettoyé pour faciliter sa lecture de l ordre utilisant la sous requête compute scalar hash match right outer join compute scalar stream aggregate index scan object nix person_contact lastname clustered index scan object pk_contact_contactid as t la conclusion est simple méfiez vous des fonctions compter les lignes d une table pour compter le nombre total de lignes d une table vous n êtes pas obligé de faire un count vous pouvez vous baser sur les informations de métadonnées qui sont autant que nous avons pu en faire l expérience toujours à jour évidemment cette astuce n est valable que si vous voulez la cardinalité de toute la table non filtrée démonstration select count from person contact go select sum row_count as row_count from sys dm_db_partition_stats where object_id object_id person contact and index_id 0 or index_id 1 go résultat en reads table contact scan count 1 logical reads 46 table sysidxstats scan count 2 logical reads 4 sys dm_db_partition_stats fig 8 13 plans d exécution les tables temporaires les tables temporaires bien qu elles soient déclarées dans tempdb restent en mémoire dans le buffer jusqu à ce qu elles atteignent une taille qui nécessite leur écriture sur disque vaut il mieux utiliser les variables de type table sql server 2000 a introduit la variable de type table c est à dire la possibilité de stocker une table dans une variable transact sql cette facilité est utile pour renvoyer une table à partir d une fonction utilisateur elle peut aussi être utilisée à l intérieur d une procédure stockée pour remplacer une table temporaire vous entendrez parfois dire que la variable de type table est bien plus légère qu une table temporaire car elle n est pas écrite dans tempdb et ne vit qu en mémoire c est erroné la variable de type table est elle aussi stockée dans tempdb comme une table temporaire sql server lui assigne un nom interne il est très simple de le démontrer select from tempdb information_schema tables go declare t table id int select from tempdb information_schema tables vous verrez dans le deuxième apparaître une nouvelle référence de table dans les métadonnées de tempdb avec un nom ressemblant à ceci exemple lors de notre exécution 04ca11fe notez que si vous ne séparez pas les deux tests par un go vous verrez la table dans les deux select le declare étant placé en premier par la compilation du code sql comme pour une table temporaire la table contenue dans la variable réside en mémoire jusqu au moment où elle atteint une certaine taille elle est ensuite écrite dans tempdb le gain apporté par les variables de type table est donc limité y a t il alors une différence entre les deux options oui la variable de type table est plus rapide principalement parce qu elle consomme moins de ressources pour la maintenir il n y pas de calcul de statistiques de colonnes sur une variable de type table par exemple le verrouillage des lignes est moindre et ne dure que le temps de l instruction de modification de même que la transaction de modification même si elle est journalisée il suffit pour le constater d utiliser la fonction fn_dblog que nous avons déjà utilisée n est pas enrôlée dans une transaction explicite elle s exécute et est validée automatiquement dans sa propre transaction privée ces avantages peuvent aussi se révéler des inconvénients selon l utilisation qu on veut faire de la variable de type table l absence de calcul de statistiques sur les colonnes peut être contre productif sur des variables de type table volumineuses comme l optimiseur n a aucune statistique son plan d exécution va se baser sur l estimation du retour de zéro ou d une seule ligne quelle que soit la réalité on peut le vérifier simplement par exemple en regardant le plan d exécution estimé de cette requête qui retourne en réalité 1763 lignes sur ma version de la base resources declare t table name sysname insert t select name from sys system_objects select from t le plan d exécution généré peut donc se révéler bien moins performant qu avec une table temporaire il est de même impossible de créer des index sur une variable à part un index lié à une contrainte déclaration de clé primaire ou de clé unique possibles uniquement à la création de la table comme il est impossible d y appliquer après création toute commande ddl ainsi les variables ne doivent pas être utilisées pour remplacer des tables temporaires volumineuses sur lesquelles on effectue beaucoup d opérations de recherche nous l avons dit les opérations sur la variable ne sont pas enrôlées dans une transaction la différence est simple à expérimenter use tempdb go create table t name sysname begin tran insert t select name from master dbo sysobjects rollback select from t go declare t table name sysname begin tran insert t select name from master dbo sysobjects rollback select from t dans la première partie du code nous utilisons une table temporaire dans laquelle nous insérons des lignes à l intérieur d une transaction explicite après l annulation de la transaction rollback la table est vide l insertion a été annulée en revanche l application du même code à la variable de type table montre que même après le rollback les lignes insérées sont toujours dans la variable bien que bénéfique pour les performances ce comportement est évidemment dangereux si vous codez des transactions impliquant des variables de type table vous risquez d obtenir des résultats inattendus en conclusion microsoft recommande de remplacer les tables temporaires par des variables autant que possible précisons donc qu elles ne sont intéressantes que lorsqu elles sont de petite taille pour des opérations simples et bien entendu lorsqu on ne peut les remplacer par des jointures des sous requêtes ou des expressions de table pour ou contre le sql dynamique le sujet fait débat que penser du sql dynamique c est ainsi qu est appelée la possibilité de générer une instruction sql plus ou moins complexe dans une variable de type varchar pour ensuite l évaluer et l exécuter dynamiquement à l aide du mot clé exec ute par exemple declare sql varchar 8000 set sql select from person contact exec sql cette syntaxe particulière est fréquemment utilisée pour construire à l intérieur de procédures stockées des requêtes complexes notamment pour permettre une combinaison de multiples critères de recherches dans la clause where imaginons le cas d un site web qui permet dans une page de formulaire d effectuer une recherche multi critères sur des produits chaque argument de recherche correspond à une colonne le tout sur une ou plusieurs tables de notre base l internaute peut saisir ou non une valeur pour chaque argument une procédure stockée reçoit en paramètre la liste des arguments qu elle utiliser pour filtrer la requête il n y a pratiquement que deux choix écrire une requête traditionnelle qui prend en compte tous les cas de figure comme ceci select firstname middlename lastname suffix emailaddress from person contact where lastname lastname or lastname is null and firstname firstname or firstname is null and middlename middlename or middlename is null and suffix suffix or suffix is null and emailaddress emailaddress or emailaddress is null order by lastname firstname ou générer son code sql de façon dynamique avec une construction comme celle ci declare sql varchar 8000 set sql select firstname middlename lastname suffix emailaddress from person contact where if firstname is not null set sql sql firstname firstname and if middlename is not null set sql sql middlename middlename and if lastname is not null set sql sql lastname lastname and if suffix is not null set sql sql suffix suffix and if emailaddress is not null set sql sql emailaddress emailaddress and set sql left sql len sql 3 exec sql le sql dynamique a ses défauts intégré dans une procédure stockée il annule en quelque sorte les avantages de précompilation de la procédure en effet la chaîne exécutée ne fait plus partie de la procédure stockée son évaluation et exécution dynamique sont prises en charge par le moteur relationnel comme les autres requêtes ad hoc sécurité une autre contrainte vient de la sécurité le sql dynamique n obéit plus aux règles de chaînage de propriétaires en d autres termes les privilèges doivent être vérifiés sur les objets contenus dans le sql dynamique et l utilisateur exécutant la procédure doit donc être autorisé sur ces objets ceci pour éviter les risques d injection sql c est à dire d envoi de code malicieux vous pouvez créer votre procédure avec la clause execute as pour l exécuter dans un contexte d utilisaeur ayant des privilèges sur ces objets soyez néanmoins très prudents sur les risques d injections voyez par exemple cet article pour vous prévenir contre elles à quoi bon faire une procédure stockée si c est pour la faire agir comme un code client mais dans le cas de figure du formulaire de recherche cet inconvénient se révèle plutôt un avantage la non réutilisation du plan d exécution permet d éviter l écueil dans lequel nous tombons dans le cas de l exemple de requête statique utilisant le bricolage lastname lastname or lastname is null nous avons créé deux procédures s...
|