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