2010-06-21 5 views
0

J'ai remarqué que la première déclaration sql avec LIKE sur une grande table s'exécute très lentement (environ 20 minutes) mais chaque suivante très très rapide (quelques secondes), même si les chaînessql serveur 2008 LIKE performance

Le serveur sql stocke-t-il les résultats de l'analyse de table pour l'instruction "like" dans un cache? Le cache possible est-il accessible à tous les clients?
Est-ce que le "cache" expire en quelque sorte?
Si un index de texte intégral est disponible pour la même colonne où le LIKE a été appliqué et rempli, le «cache» influence-t-il la vitesse du texte intégral?
Est-ce que quelqu'un connaît un document expliquant le problème?
Vive
Greg

Répondre

1

ce que vous vivez est très probablement le résultat d'une partie (ou la totalité) de la table étant dans le cache de mémoire tampon (pages de données mises en mémoire cache) après la première analyse. En fonction de la fréquence à laquelle vous rencontrez la même table avec les analyses, la mémoire disponible et les autres tables mises en cache, SQL Server peut conserver les pages de votre tableau dans le cache tampon ou les augmenter au profit de quelqu'un d'autre.

Pour les requêtes sans leader wild card (comme dans vos exemples ci-dessus), vous pouvez le réduire à un balayage d'index si la colonne vous interrogez est indexé avec un indice normal ...

index de texte intégral sont pas utilisé par l'opérateur LIKE, si vous avez un index fulltext sur la colonne, il est probablement une bonne idée de passer d'une requête LIKE à une requête fulltext ... Voir http://msdn.microsoft.com/en-us/library/ms142559.aspx

+0

l'index est malheureusement pas une option - la chaîne peut être n'importe où dans le domaine et la taille est trop grande pour être indexée .. si c'est des pages en mémoire donc je suppose que ce n'est pas fiable en termes de performance de la mémoire à tout moment ... – Greg

+0

Ok, on dirait que l'indexation en texte intégral serait votre meilleure option ... ... et oui, les pages du cache tampon peuvent être dépassées à tout moment par une autre requête (sauf si vous en avez assez ram pour adapter la DB entière en mémoire :)). – KristoferA

0

SQL Server fonctionne essentiellement comme un système de mémoire virtuelle , donc l'augmentation des performances que vous voyez est simplement plus de pages étant en mémoire quand il effectue la deuxième analyse de la table. Je ne suis pas un expert en SQL Server et peut-être que quelqu'un d'autre peut ajouter plus de détails à cela, mais lorsque vous utilisez LIKE, vous supprimez la capacité des bases de données à utiliser n'importe quel index. Si vous souhaitez utiliser l'index de texte intégral, vous devez utiliser l'une des commandes de requête d'index de texte intégral FREETEXT, FREETEXTTABLE, CONTAINS et CONTAINSTABLE.