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