約2000万行のテーブルを取得しました。データベースは Azure でホストされています。(S2 層) 列の 1 つにフルテキスト インデックスを設定しました (列には郡、州、都市、町、町、村、学校、大学などが含まれます)。
select ステートメントの例を次に示します。
SELECT * FROM dbo.[Table_Name]
WHERE CONTAINS(Value,'"clair county" OR "alabama" OR "miami" OR "talladega county"
OR "jefferson county" OR "shelby county" OR "colorado")
通常の SQL Server (Azure ではない) を起動すると、1 秒以内に最大 35,000 行が取得されます。ただし、Azure では約 6 分かかります。なぜそんなにかかるのかという問題は、DTU の最大値に達するためです。このクエリを実行すると、CPU 使用率は約 1%、データ IO 使用率は 100% (大量の読み取り) しかかかりません。ですから、そのような種類のクエリを最適化したいのです。p11 価格レベルでも、通常の SQL Server Developer Edition よりもはるかに遅くなります。
ここに私が考えることができるいくつかの解決策があります:
SQL Azure の使用をやめて、通常の SQL Server をホストできる Azure VM に切り替えます。大量の読み取りが原因でDTUの制限に達したときの問題は解決される可能性があると思います
クエリを最適化します。行の約 95% を除外するクエリを作成する方法があるはずです。上記で指定された行クエリの例を次に示します:
Jefferson Union High School District
,Miami-Yoder School District 60-JT
,Upper Saint Clair School District
,Louisville/Jefferson County
. SQL Serverが特定の単語の中でのみ単語を含む行を返す場合、クエリを作成する方法があるかもしれませんが、クエリで単語、、、が指定されていないため取得できJefferson Union High School District
ませUnion
ん。High
School
読み取り数を変更するためにテーブルを再編成します。(出来るかは不明)
ありがとう