我需要一些帮助才能在桌面上创建索引。该表具有以下结构:
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但更多的是关于你可以创建什么类型的索引,而不是何时使用它们。