sql server smo查询性能(2014年与2017年)

kwvwclae  于 2021-07-26  发布在  Java
关注(0)|答案(0)|浏览(206)

我有两个完全相同的数据库,一个在sql server 2014上,另一个在2017上。在使用smo查询所有表和列时,我得到的性能差别很大。在profiler运行时查看它,我注意到在2017年,它向sys.periods添加了一个额外的连接,这可以从下面两个版本生成的sql中看到:
sql server 2017:

exec sp_executesql N'SELECT
                         clmns.column_id AS [ID],
                         clmns.name AS [Name]
                     FROM
                         sys.tables AS tbl
                     LEFT OUTER JOIN 
                         sys.periods as periods ON periods.object_id = tbl.object_id
                     LEFT OUTER JOIN 
                         sys.tables as historyTable ON historyTable.object_id = tbl.history_table_id
                     INNER JOIN 
                         sys.all_columns AS clmns ON clmns.object_id=tbl.object_id
                     WHERE
                         (tbl.name = @_msparam_0 
                          AND SCHEMA_NAME(tbl.schema_id) = @_msparam_1)
                     ORDER BY
                         [ID] ASC',
            N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000)',
            @_msparam_0=N'ExampleTable',@_msparam_1=N'ExampleSchema'

sql server 2014:

EXEC sp_executesql N'SELECT
clmns.column_id AS [ID],
clmns.name AS [Name]
FROM
sys.tables AS tbl
INNER JOIN sys.all_columns AS clmns ON clmns.object_id=tbl.object_id
WHERE
(tbl.name=@_msparam_0 and SCHEMA_NAME(tbl.schema_id)=@_msparam_1)
ORDER BY
[ID] ASC',N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000)',@_msparam_0=N'ExampleTable',@_msparam_1=N'ExampleSchema'

我的理解是2016增加了时态表,这就是为什么它加入到 sys.periods . 但是,每个查询的持续时间都从0毫秒跳到80毫秒,这大大增加了总体运行时间。
我的问题是,有没有一种方法可以对抗这种巨大的性能冲击,或者有效地告诉smo不要关心时态表,而是像2014年那样生成sql?时态表不是我正在使用的东西,所以如果可以的话,我不介意关闭它。
凯文

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题