存在于多个表中的索引数据

时间:2011-10-08 08:35:01

标签: sql sql-server sql-server-2005 tsql

我想查询多个表中的一些数据,就好像它是一个表一样。大约有10个表,所有表都有不同的列,但有5个匹配的列。理想情况下,我会重新设计表,以便共享列进入一个表,然后我可以创建其他表之间的关系。不幸的是,这不是一个选项,因为我无法更改现有的表格。

访问和索引数据的最佳方法是什么?我正在考虑用UNION ALLs创建一个视图或存储过程,例如

SELECT COL1, COL2, COL3 FROM TABLE1
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE2
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE3
UNION ALL
SELECT COL1, COL2, COL3 FROM TABLE4

但那我该如何编入索引呢?视图或存储过程最好吗?或者也许是一种完全不同的方法?

2 个答案:

答案 0 :(得分:0)

SQL Server有indexed views但它在视图中不支持UNION。

如果你必须在所有表上查询数据,就像它是一个,并且你无法更改当前模式,那么我建议使用触发器维护另一个可以索引的单个表等。

答案 1 :(得分:0)

查看联盟所有人都可以胜任。您应该索引参与视图的各个表。实际上它可以使性能受益(优化器可能会发现在特定查询中不需要扫描某些表)。

存储过程意味着并发症,因为在from子句中使用它并不容易(但仍然可以使用OPENQUERY,例如'SELECT * FROM OPENQUERY(YourServer,'SET FMT_ONLY OFF EXEC stored_proc'))。当生成结果涉及一些程序逻辑(例如复杂的报告)时,它的表现会更好。