1


0

Stack OverflowデータダンプをSQL Server 2008にインポートしました。 特にPostsテーブルに対するクエリの中には、戻るまでに1分以上かかるものがあります。

クエリ例:

SELECT Id、PostTypeId、AcceptedAnswerId、CreationDate、スコア、ViewCount、ボディ、OwnerUserId、OwnerDisplayName、LastEditorUserId、LastEditDate、LastActivityDate、タイトル、タグ、AnswerCount、CommentCount、FavoriteCount、ClosedDate、ParentIdからdbo.Posts

クエリは881665行を返し、完了までに2分弱かかります。 私はこれと他のテーブルのために設定されたインデックスを持っています。 これをスピードアップするために私にできることはありますか?

2 Answer


3


あなたは `WHERE`句を持っていないので、あなたはテーブル全体を読むテーブルスキャンを実行しています。 これは常に比較的遅いでしょう。インデックスはまったく役に立ちません。

クエリを高速化するには、less :)を選択します。特定のタグ、または特定の期間にわたる質問にのみ関心があるように、WHERE句を入れてみます。 その後、それらの列にインデックスを付けてクエリを高速化できます。


1


あなたがコピーをしているなら、SqlBulkCopy APIを見てください。 私はそのAPIを使って10分から4秒の挿入をしました。

しかし、ジェレミーは完全に正しいです。 文字列(body列)を含む800000件以上の結果に対してクエリを実行するとどうなりますか。 あなたが体を必要としないなら、あなたはおそらく結果をかなりスピードアップすることができます。

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

フルテキストカタログも有効になっていますか。 投稿テキストを検索している場合は、この索引付けによって速度が大幅に向上します。