让 SQL 服务器优化器认为记录数很大
Make SQL Server Optimizer to think that record count is huge
我们在生产中几乎没有巨大的 tables(有数百万行),持有发票相关数据。由于这些 tables,我们在生产中面临性能问题。
在预生产环境中,由于数据量较少,我们无法模拟性能测试。比如说,dbo.InvoiceHeader, dbo.InvoiceDetails
我看到过一些地方,我们可以在其中人为地更新 table 的统计信息,以使优化器相信 table 中存在大量行。这样,我们就可以在预生产中调整查询并对其进行测试。我在网上搜索。我找不到相同的。
能否请您指导,如何临时操作 table 的大量行的统计信息。我们将进行性能调整并将其恢复为预生产环境中的原始设置。
感谢您的意见。
我相信这就是您要找的东西
https://sqlsunday.com/2016/02/27/update-statistics-with-rowcount/
https://blogs.msdn.microsoft.com/queryoptteam/2006/07/21/update-statistics-undocumented-options/
以下内容为以上链接的组合,以防以后链接失效
UPDATE STATISTICS table | view
[
{
{ index | statistics_name }
| ( { index |statistics_name } [ ,...n ] )
}
]
[ WITH
[
[ FULLSCAN ]
| SAMPLE number { PERCENT | ROWS } ]
| RESAMPLE
| <update_stats_stream_option> [ ,...n ]
]
[ [ , ] [ ALL | COLUMNS | INDEX ]
[ [ , ] NORECOMPUTE ]
] ;
<update_stats_stream_option> ::=
[ STATS_STREAM = stats_stream ]
[ ROWCOUNT = numeric_constant ]
[ PAGECOUNT = numeric contant ]
<update_stats_stream_option>
This syntax is for internal use only and is not supported. Microsoft reserves the right to change this syntax at any time.
您可以使用以下方法更改统计数据
UPDATE STATISTICS <Table Name> WITH ROWCOUNT=10000000, PAGECOUNT=24000;
UPDATE STATISTICS <Table Name> WITH ROWCOUNT=120;
您可以使用重置统计信息
DBCC UPDATEUSAGE (database_name, <table name>, index_name) WITH COUNT_ROWS;
警告:不要在生产中这样做。索引的统计信息是全局的,这意味着对 table 统计信息的任何更改都会影响使用该索引的任何查询。仅将其用于演示或测试目的。
我们在生产中几乎没有巨大的 tables(有数百万行),持有发票相关数据。由于这些 tables,我们在生产中面临性能问题。
在预生产环境中,由于数据量较少,我们无法模拟性能测试。比如说,dbo.InvoiceHeader, dbo.InvoiceDetails
我看到过一些地方,我们可以在其中人为地更新 table 的统计信息,以使优化器相信 table 中存在大量行。这样,我们就可以在预生产中调整查询并对其进行测试。我在网上搜索。我找不到相同的。
能否请您指导,如何临时操作 table 的大量行的统计信息。我们将进行性能调整并将其恢复为预生产环境中的原始设置。
感谢您的意见。
我相信这就是您要找的东西
https://sqlsunday.com/2016/02/27/update-statistics-with-rowcount/
https://blogs.msdn.microsoft.com/queryoptteam/2006/07/21/update-statistics-undocumented-options/
以下内容为以上链接的组合,以防以后链接失效
UPDATE STATISTICS table | view
[
{
{ index | statistics_name }
| ( { index |statistics_name } [ ,...n ] )
}
]
[ WITH
[
[ FULLSCAN ]
| SAMPLE number { PERCENT | ROWS } ]
| RESAMPLE
| <update_stats_stream_option> [ ,...n ]
]
[ [ , ] [ ALL | COLUMNS | INDEX ]
[ [ , ] NORECOMPUTE ]
] ;
<update_stats_stream_option> ::=
[ STATS_STREAM = stats_stream ]
[ ROWCOUNT = numeric_constant ]
[ PAGECOUNT = numeric contant ]
<update_stats_stream_option>
This syntax is for internal use only and is not supported. Microsoft reserves the right to change this syntax at any time.
您可以使用以下方法更改统计数据
UPDATE STATISTICS <Table Name> WITH ROWCOUNT=10000000, PAGECOUNT=24000;
UPDATE STATISTICS <Table Name> WITH ROWCOUNT=120;
您可以使用重置统计信息
DBCC UPDATEUSAGE (database_name, <table name>, index_name) WITH COUNT_ROWS;
警告:不要在生产中这样做。索引的统计信息是全局的,这意味着对 table 统计信息的任何更改都会影响使用该索引的任何查询。仅将其用于演示或测试目的。