2016-04-13 13 views
0

晴れのテーブルストレージのタイムスタンプ列に対してクエリを実行しようとしています。私は入力値がタイムスタンプ値よりも大きいかどうかをチェックするwhere条件を持っています。 azureタイムスタンプの列がパーティションキーまたは行キーではありません。私はパーティションまたは行キーではない列に対してクエリを実行するクエリのパフォーマンスを低下させるクエリを知るようになった。ますます多くのレコードがある場合、私のアプリケーションは非常に遅いです。タイムスタンプデータをパーティションキーデータに移動しようとしましたが、パーティションキーが "4/13/2016 5:20:03 AM +00:00"のようなタイムスタンプ値を受け付けていません。クエリのパフォーマンスを向上させる最適なオプションは何でしょうか。紺色のストレージでのクエリの実行が非常に遅い

答えて

5

すでに言及したように、クエリにPartitionKeyおよび/またはRowKeyが含まれていない場合、テーブルサービスは完全なテーブルスキャンを実行しているためクエリが遅くなります。日付/時刻の値をPartitionKeyという値にすることをお勧めします。

私は鍵データを分割するタイムスタンプデータを移動しようとしましたが、パーティション キーは次のようにタイムスタンプ値を受け付けていません「2016年4月13日5時20分03秒AM 00:00」

値には許可されていない文字が含まれているためです(https://msdn.microsoft.com/en-us/library/azure/dd179338.aspx - >Characters Disallowed in Key Fieldsセクションを参照)。

  • あなたはYYYY-MM-DDThh:mm:ss形式で日付/時刻の値をフォーマットすることができます。

    は実際にあなたがこの問題を解決するために何ができるものがいくつかあります。

  • 日付/時刻の値をティックに変換し、いくつかのゼロを先頭に付けて、PartitionKeyに保存することができます。何かのように:

    PartitionKey値= YourDateTimeValue.Ticks.ToString( "d19");あなたも、この便利かもしれません

    PartitionKey Value = (DateTime.MaxValue.Ticks - YourDateTimeValue.Ticks).ToString("d19"); 
    

    https://azure.microsoft.com/en-in/documentation/articles/storage-table-design-guide/あなたが最新のエントリが一番上に来てほしい場合は

、あなたのような何かを行うことができます。

+0

この句の「キーフィールドで使用できない文字」では、文字を含むストレージテーブルがいくつか表示されます。制限は文字または特殊文字のためのものですか? – Kurkula

関連する問題