J'ai un problème de performance très particulier au travail!
Dans le système, nous utilisons une table contenant des informations sur le processus de flux de travail en cours. L'un des champs détient une feuille de calcul contenant des métadonnées sur le processus (ne me demandez pas pourquoi !! et non, je ne peux pas le changer !!) P>
Le problème est que ce tableur est stocké dans un Champ d'image dans un serveur SQL 2005 (dans une base de données définie avec la compatibilité SQL 2000). P>
Ce tableau a actuellement 22k + lignes et même une simple requête comme celle-ci: P>
SELECT TOP 100 * FROM OFFENDING_TABLE
4 Réponses :
Une réponse courte consiste à sélectionner uniquement contre plusieurs lignes lorsque les champs renvoyés n'incluent pas le champ d'image incriminé, c'est-à-dire NO SELECT *. Si vous souhaitez la valeur du champ d'image, récupérez-la au cas par cas. P>
Réglage des types de valeur de grande valeur hors ligne L'option doit définitivement aider les performances. La taille de la ligne sera significativement plus petite, SQL Server peut faire beaucoup moins de lectures physiques pour obtenir la table. P>
Tout d'abord - Ne faites jamais un Vous avez trois choix de base: p>
déplace ce champ de blob dans une table séparée si ce n'est pas toujours nécessaire; probablement pas pratique depuis votre mention que vous ne pouvez pas changer le schéma p> li>
Soyez plus prudent avec votre Voir si vous pouvez limiter votre requête pour inclure un Il n'y a pas de commutateur de magie "faire ce changement plus rapide" - mais vous pouvez optimiser votre requête ou optimiser votre disposition de table. Les deux aide. Si vous ne pouvez rien changer - ni la disposition de la table, ni ajouter un index, ni changer les requêtes, vous aurez du mal à optimiser quoi que ce soit, j'ai peur ... P>
Il suffit de changer le champ vers Varbinary (Max) ne changera rien du tout - aucune amélioration de la performance n'est attendue simplement de modifier le type de données. P> SELECT * CODE> STRORT> dans le code de production - Rapport ou non. p>
Sélectionnez les instructions CODE> Pour sélectionner uniquement les champs que vous avez vraiment besoin - et omettez le champ BLOB P> LI>
où la clause code> et trouver un moyen d'optimiser le plan de requête par ex. Ajout d'un index approprié à la table (si vous le pouvez) p> li>
ul>
Je vous recommanderais de regarder dans la disposition de la table d'incrimination Santé:
ALTER INDEX ALL ON offending_table REBUILD;