2009-08-30 6 views
1

J'ai importé le vidage de données Stack Overflow dans SQL Server 2008. Certaines requêtes, en particulier sur la table Posts, prennent plus d'une minute à retourner.SQL Server est extrêmement lent lors de l'exécution des requêtes sur le vidage de données Stack Overflow

Exemple requête:

SELECT 
    Id, PostTypeId, AcceptedAnswerId, CreationDate, 
    Score, ViewCount, Body, OwnerUserId, OwnerDisplayName, 
    LastEditorUserId, LastEditDate, LastActivityDate, Title, 
    Tags, AnswerCount, CommentCount, FavoriteCount, ClosedDate, ParentId 
FROM dbo.Posts 

La requête renvoie 881665 lignes et prend un peu moins de 2 minutes. J'ai dans l'index mis en place pour cela et les autres tables. Y a-t-il quelque chose que je puisse faire pour accélérer cette chose?

+0

Que mesurez-vous? Il est temps d'afficher la première ligne ou l'heure à récupérer sur la 881,665ème rangée? – APC

Répondre

3

Étant donné que vous n'avez pas de clause WHERE, vous effectuez une analyse de table qui lit la table entière. Ce sera toujours relativement lent. un index ne va pas aider du tout. Pour accélérer la requête, sélectionnez moins :) Essayez de mettre une clause WHERE afin de vous intéresser uniquement à certaines balises ou questions sur une période donnée. Ensuite, vous pouvez mettre un index sur ces colonnes pour accélérer la requête.

+0

800K lignes n'est pas si difficile à scanner; Je parie que c'est le * transfert * de 800K lignes qui prend tout le temps. Essayez de grepper un fichier ligne 800K, c'est rapide même sans index. – SquareCog

1

Si vous faites des copies, jetez un oeil à l'API SqlBulkCopy. J'ai eu une insertion aller de 10 minutes à 4 secondes en utilisant cette API.

Mais Jeremy a parfaitement raison. Qu'attendez-vous d'une requête sur 800000+ résultats qui contiennent des chaînes (la colonne de corps). Si vous n'avez pas besoin du corps, vous pourriez probablement accélérer le résultat de manière significative.

Quel matériel (en particulier le disque dur) utilisez-vous pour SQL Server? Si vous insérez une base de données comme celle-ci sur votre C: \, vous n'obtiendrez pas le résultat souhaité.

Avez-vous également activé les catalogues de texte intégral? Si vous recherchez dans le texte de l'article alors cette indexation améliorera considérablement votre vitesse.

Questions connexes