Les résultats de l'parsing de table sont-ils conservés en memory annulant l'avantage des index?

Question théorique SQL Server 2008:

Si une parsing de table est effectuée sur SQL Server avec une quantité importante de memory «libre», les résultats de cette parsing de table seront-ils conservés en memory, annulant ainsi l'efficacité qui peut être introduite par un index sur la table?

Mise à jour 1: Les arrays en question contiennent des données de reference avec env. 100 à 200 loggings par table (je ne connais pas la taille moyenne de chaque rangée), donc nous ne parlons pas de tables massives ici.

J'ai parlé au client de l'introduction d'une solution memcached / AppFabric Cache pour ces données de reference, mais ce n'est pas prévu pour le moment et ils searchnt une «victoire rapide» qui présente un risque minime.

Outre le problème de performances (même si toutes les pages sont en memory, un scan sera encore beaucoup plus lent qu'un index recherché sur une table de taille significative), il y a un problème supplémentaire: la contention .

Le problème avec les scans est que toute opération devra visiter chaque rangée. Cela signifie que n'importe quel select bloquera derrière n'importe quelle insertion / mise à jour / suppression (puisqu'il est garanti de visiter la rangée verrouillée par ces opérations). L'effet est essentiellement la serialization des opérations et ajoute une énorme latence, car SELECT doit maintenant attendre que DML s'engage à chaque fois. Même sous une concurrency légère, l'effet est globalement lent et lent à répondre à la table. Avec les index, les opérations actuelles ne regardent que les rangées des domaines d'intérêt, ce qui, en raison de probabilités simples, réduit les risques de conflit. Le résultat est un système beaucoup plus vivant, réactif, à faible latence.

Chaque page lue dans l'parsing sera lue dans le pool de memory tampon et uniquement libérée sous la pression de la memory conformément à la politique d'expulsion du cache.

Je ne sais pas pourquoi vous croyez que cela annulerait les gains d'efficacité que pourrait générer un indice sur la table.

Un index signifie probablement que beaucoup less de pages doivent être lues et même si toutes les pages sont déjà dans le cache, aucune lecture physique n'est nécessaire, ce qui réduit le nombre de lectures logiques. Les lectures logiques ne sont pas gratuites. Ils ont encore des frais généraux pour verrouiller et lire les pages.

Les parsings de table complètes ne sont pas non plus extensibles à mesure que datatables augmentent. C'est très simple. À mesure que davantage de données sont ajoutées à une table, les parsings de table complètes doivent traiter davantage de données à terminer et, par conséquent, elles prennent plus de time. En outre, ils produiront plus de requests de disque et de memory, mettant encore plus de pression sur votre équipement. Considérons une table de 1 000 000 lignes sur laquelle une parsing de table complète est effectuée. SQL Server lit datatables sous la forme d'une page de données 8K. Bien que la quantité de données stockées dans chaque page puisse varier, supposons qu'en moyenne 50 lignes de données correspondent à chacune de ces pages de 8 Ko pour notre exemple. Afin d'effectuer une parsing complète des données pour lire chaque ligne, 20 000 lectures de disque (1 000 000 lignes / 50 lignes par page). Cela équivaudrait à 156 Mo de données qui doivent être traitées, juste pour cette requête. À less d'avoir un sous-système de disque vraiment très rapide, il peut prendre un certain time pour récupérer toutes ces données et les traiter. Maintenant, supposons que cette table double en taille chaque année. L'année prochaine, la même requête doit lire 312 Mo de données juste pour compléter.

Pls référer ce lien – http://www.datasprings.com/resources/articles-information/key-sql-performance-situations-full-table-scan