テーブルにインデックスを作成するための支援が必要です。テーブルの構造は次のとおりです。
RowsetID INT
Col001 SQL_VARIANT
Col002 SQL_VARIANT
....
Col255 SQL_VARIANT
テーブルには、次の方法で多くの情報 (数百万行) が格納されます。
RowsetID Col001 Col002 Col003 Col004 ... Col255
1 1 Ivan 10 NULL NULL
1 2 Petar 11 NULL NULL
...
1 n Petko m NULL NULL
...
2 10 Germany 120 NULL NULL
2 11 Japan 121 NULL NULL
...
2 m Poland 120 NULL NULL
...
4 120 Europe NULL NULL
4 121 Asia NULL NULL
これは、状況を説明するためだけに使用されるサンプル データであることに注意してください。アイデアは、異なる情報を別々の行セットに格納することです。
ここで、次のようにすべての情報を取得する必要があります。
SELECT *
FROM
(
SELECT Col001,Col002,Col003
FROM DataTable
WHERE RowsetID=1
)AS RowsetOne
INNER JOIN
(
SELECT Col001,Col002,Col003
FROM DataTable
WHERE RowsetID=2
)AS RowsetTwo ON RowsetOne.Col003=RowsetTwo.Col001
INNER JOIN
(
SELECT Col001,Col002,Col003
FROM DataTable
WHERE RowsetID=4
)AS RowsetFour ON RowsetTwo.Col003=RowsetFour.Col001
...
私の実際の状況では、結合する必要がある多くの行セットと列があり、それらは何百万もの行であるため、上記の選択を含むビューは遅くなります。
次のようにテーブルにインデックスを作成することにしました。
CREATE UNIQUE NONCLUSTERED INDEX [PersonsPersionID] ON DataTable
(
Col001
)
WHERE RowsetID=1
CREATE UNIQUE NONCLUSTERED INDEX [PersonsCountryID] ON DataTable
(
Col003
)
WHERE RowsetID=1
...
CREATE UNIQUE NONCLUSTERED INDEX [CountriesCountryID] ON DataTable
(
Col001
)
WHERE RowsetID=2
私の考えは、結合列として使用している各列にインデックスを作成することでしたが、最終的に最適化は達成されませんでした。
どのタイプのインデックスを作成すればよいか教えていただけますか? 私は T-SQL インデックスのドキュメントを読むのに何時間も費やしましたが、重要なのは作成できるインデックスの種類であって、いつ使用するかではありません。