【发布时间】:2017-05-14 10:03:33
【问题描述】:
我有 40 个表 - Table1、Table2、Table3 ... Table40,都有相同的列。
这些表包含不同的数据并识别每个表的数据,我有一列Reporting_Type,每个表都有不同的值。
例如:Table1 的列Reporting_Type 具有值Reportin_Type1 等等。
请注意,每个表包含 2-3 百万条记录。
我需要创建一个视图来组合所有表中的数据。
我只是应用了 UNION ALL 并提出以下查询:
CREATE VIEW ALL DATA
AS
SELECT
COLUMN1, COLUMN2, COLUMN3, REPORTING_TYPE ..., COLUMN 40
FROM
TABLE1
UNION ALL
SELECT
COLUMN1, COLUMN2, COLUMN3, REPORTING_TYPE ..., COLUMN 40
FROM
TABLE2
UNION ALL
SELECT
COLUMN1, COLUMN2, COLUMN3, REPORTING_TYPE ..., COLUMN 40
FROM
TABLE3
....
SELECT
COLUMN1, COLUMN2, COLUMN3, REPORTING_TYPE ..., COLUMN 40
FROM
TABLE40
上述查询需要花费大量时间从所有表中获取数据。
能否建议任何性能优化查询或任何其他方式在 SQL Server 2012 中创建此视图?
如果有人觉得这个问题太幼稚,我们深表歉意。我是数据库新手。如果需要更多信息,请告诉我。
【问题讨论】:
-
这个表有索引吗?
-
@gofr1 。不,先生。他们没有任何索引。
-
这可能是个问题。考虑添加索引。
dirty reads也可能会有所帮助。尝试使用带有表提示WITH (NOLOCK)(例如FROM TABLE40 WITH (NOLOCK))的脏读或在运行视图时添加SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED。还可以查看索引视图 (msdn) -
非常感谢先生的回答。但我不明白表上的索引如何帮助更快地查看数据,因为我没有使用“where”子句。这只是计划。从 table_name 查询中选择 *。
标签: sql-server performance view union-all