0

テーブルにインデックスを作成するための支援が必要です。テーブルの構造は次のとおりです。

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 インデックスのドキュメントを読むのに何時間も費やしましたが、重要なのは作成できるインデックスの種類であって、いつ使用するかではありません。

4

0 に答える 0