2009-08-30 8 views
1

SQL Server 2008にスタックオーバーフローデータダンプをインポートしました。特に、ポストテーブルでクエリが返されるのが1分以上あります。スタックオーバーフローデータダンプでクエリを実行すると、SQL Serverが極端に遅くなる

例クエリ:

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

問合せは、881665行を返し、完了するために、ちょうど下の2分かかります。私はこのインデックスと他のテーブルのインデックスを設定しています。このことをスピードアップするためにできることはありますか?

+0

何を測定していますか?最初の行を表示する時間または881,665行に取得する時間? – APC

答えて

3

WHERE句がないため、テーブル全体を読み取るテーブルスキャンを実行しています。これは常に比較的遅いでしょう。インデックスはまったく役に立たない。

クエリを高速化するには、lessを選択してください。WHERE句を入力して、特定のタグや特定の期間の質問のみに興味を持ってください。次に、それらの列にインデックスを付けてクエリを高速化できます。

+0

800K行はスキャンするのが難しくありません。私はそれがすべての時間を取っている800Kの行の*転送*だと賭ける。 800Kのラインファイルをグロッピングしてみてください。インデックスなしでも高速です。 – SquareCog

1

コピーを行っている場合は、SqlBulkCopy APIをご覧ください。私はそのAPIを使って10分から4秒に挿入を行っています。

しかし、ジェレミーは完全に正しいです。文字列(本文列)を含む800000件以上の結果に対してクエリを実行するにはどうしたらよいでしょうか。あなたが体を必要としない場合は、結果を大幅にスピードアップする可能性があります。

SQL Server用に使用しているハードウェア(特にHDD)です。そのようなDBをあなたのC:\に押し込むと、望む結果が得られません。

また、フルテキストカタログが有効になっていますか?あなたがポストテキストで検索している場合、このインデックスは大幅にあなたのスピードを向上させます。

関連する問題