1

「SQL Server 2008 R2」には、サイズが約5 TBでサイズが連続的に増加するデータベースがあります。 私は万行の何百ものTBL1に単純なクエリを実行するといくつかの問題を抱えている:Big SqlServer 2008 R2データベースパフォーマンスの向上、インデックス作成、およびパーティション化

select x1,x2,x3 
from tbl1 
where date > '2017-04-03 00:00:00.000' and date < '2017-04-04 00:00:00.000' 
     and mid = 300 

このクエリは、約20秒かかります。 datemid列に2つのクラスタ化されていないインデックスがあり、このクエリがそれらを利用しています。

この表のselectinsertのパフォーマンスを改善するための最良のアイデアは何ですか? (自動パーティショニングなど)

私はEntity Frameworkを使用していますので、テーブルの名前を変更したり、別の名前にパーティションを分けたりしたくありません。

何か助けていただきありがとうございます。

+0

※SQL Server 2008 R2の* edition *は使用していますか? –

+0

@MikeNakis:Microsoft SQL Serverエンタープライズ版(64ビット) – Pedram

+0

ああ、旗艦。このエディションはパーティショニングに関してすべてを行いますので、運が良かったです。 –

答えて

2

あなたの質問には、手動で行う必要がある、つまりテーブルを別の名前の複数のテーブルに分割する必要があるという印象を受けていると言われています。

そうではありません。

ms-sql-serverでは、テーブルとインデックスをパーティション分割するために必要な操作は、CREATE PARTITIONコマンドを発行することだけです。だから、先に行くと、それらを調べる:

CREATE PARTITION FUNCTION

CREATE PARTITION SCHEME

だから、あなたのケースで、私はあなたが、date列に分割し、おそらく別のパーティションに毎年を入れ、またはだろうと推測う場合によっては毎月別のパーティションに置くこともできます。

ただし、ご質問がX-Y problemの場合があることにご注意ください。あなたが持つ難しさは、パフォーマンスに関連しているようです。あなたは、あなたの問題を解決するためにあなたがする必要があるのはパーティショニングだという結論に達したように見えるので、パーティショニングに関する質問を投稿しています。私はあなたの質問に答えていますが、あなたの問題が分割されていない場合もあります。あなたのテーブルが非常に大きく、継続的に成長しているなら、おそらく起こっていることは、行が継続的にそれに追加されていることです。したがって、あなたのSELECTはあなたのINSERTと戦ってテーブルにアクセスしてください。

+0

あなたの答えをありがとう。あなたが言ったX-Y問題について:私はDBにデータを「挿入」するサービスを持っています。私がサービスを停止すると、問題は依然として存在します。 – Pedram

+0

「マネジメントスタジオ」の「実行計画」をチェックすると、すべてがうまくいくように見えます(インデックスの使用について...)。しかし、実際にはクエリを実行することは私が期待したとおりの方法ではない、それはあまりにも多くの時間がかかります。 – Pedram

+1

最終的には、非常に大きなテーブルのうち2つを「日付」に基づいていくつかの部分に分割し、問題は完全に解決されました。 – Pedram

関連する問題