T-SQL需要协助在sql_variant列上创建索引

时间:2013-01-28 17:45:00

标签: tsql sql-server-2012 indexing

我需要一些帮助才能在桌面上创建索引。该表具有以下结构:

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索引documentation但更多的是关于你可以创建什么类型的索引,而不是何时使用它们。

0 个答案:

没有答案