search
HomeDatabaseMysql Tutorial第十二章SQLServer统计信息(3)发现过期统计信息并处理

前言: 统计 信息 是关于谓词中的数据分布的主要 信息 源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能 统计 需要返回的数据。 在创建列的 统计 信息 后,在 DML 操作如 insert 、 update 、 delete 后, 统计 信息 就会过时。因为这些

前言:

        统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要返回的数据。

        在创建列的统计信息后,在DML操作如insertupdatedelete后,统计信息就会过时。因为这些操作更改了数据,影响了数据分布。此时需要更新统计信息

        在高活动的表中,统计信息可能几个小时就会过时。对于静态表,可能几个星期才会过时。这要视乎表上DML的操作。

        从2000开始,SQLServer对增删改操作会增加在表sysindexes中的RowModCtrRow Modification Counter)值,当统计信息更新后,该值会重置会0,并重新累加。所以查看这个表的这个值就可以知道统计信息是否过时。

        在2000之后,SQLServer改变了这种跟踪方式,把更改存放到对应的数据行上。这个值是未公开的ColModCtr

        但是sys.sysindexes2012依旧可用,还是可以用这个表的数值来确定是否过期

 

准备工作:

本文将用到下面的系统视图和兼容性视图:

1、  sys.sysindexes:兼容性视图,提供RowModCtr列值,是本文的核心。

2、  sys.indexes:使用表ID来获得统计信息名。

3、  sys.objects:获取架构名。

 

步骤:

显示RowModCtr值很高的统计信息

SELECT DISTINCT

        OBJECT_NAME(SI.object_id) AS Table_Name ,

        SI.name AS Statistics_Name ,

        STATS_DATE(SI.object_id, SI.index_id) AS Last_Stat_Update_Date ,

        SSI.rowmodctr AS RowModCTR ,

        SP.rows AS Total_Rows_In_Table ,

        'UPDATE STATISTICS [' + SCHEMA_NAME(SO.schema_id) + '].['

        + OBJECT_NAME(SI.object_id) + ']' + SPACE(2) + SI.name AS Update_Stats_Script

FROM    sys.indexes AS SI( NOLOCK )

        INNER JOIN sys.objects AS SO( NOLOCK ) ON SI.object_id = SO.object_id

        INNER JOIN sys.sysindexes SSI( NOLOCK ) ON SI.object_id = SSI.id

                                                    AND SI.index_id = SSI.indid

        INNER JOIN sys.partitions AS SP ON SI.object_id = SP.object_id

WHERE   SSI.rowmodctr > 0

        AND STATS_DATE(SI.object_id, SI.index_id) IS NOT NULL

        AND SO.type = 'U'

ORDER BY RowModCTR DESC


 

 

分析:

需要了解一些事情:

1、  从你上次更新统计信息是何时的事情?

2、  在更新统计信息之后有多少事务发生在表上?

3、  哪些T-SQL需要用于更新统计信息

4、  更新统计信息是否可行?这个是对比RowModCTR列和Total_Rows_In_Table列。

 

当在数据库开启了Auto_Update_Statistics之后,还有数据的话,那就有必要更新统计信息。下面有一些规则:

1、  表大小从0增长。

2、  当表的数据小于等于500时没有问题,并且ColModCtr从超过500行之后开始增长。

3、  当表的行数超过500行时,在统计信息对象的引导列的ColModCtr值超过500+20%的行数时,就需要更新。

例子:有一个100万行的表,优化器会在插入200500行新数据后认为统计信息过时。但是这并不是绝对化的。

 

扩充知识:

没有直接的方式访问ColModCtr的值,因为它只是用于优化引起,并且对用户透明,但是可以使用DAC(专用管理员连接)来访问sys.sysrscols.rcmodified系统。但是仅在2008R2及以后版本才可用。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
MySQL String Types: Storage, Performance, and Best PracticesMySQL String Types: Storage, Performance, and Best PracticesMay 10, 2025 am 12:02 AM

MySQLstringtypesimpactstorageandperformanceasfollows:1)CHARisfixed-length,alwaysusingthesamestoragespace,whichcanbefasterbutlessspace-efficient.2)VARCHARisvariable-length,morespace-efficientbutpotentiallyslower.3)TEXTisforlargetext,storedoutsiderows,

Understanding MySQL String Types: VARCHAR, TEXT, CHAR, and MoreUnderstanding MySQL String Types: VARCHAR, TEXT, CHAR, and MoreMay 10, 2025 am 12:02 AM

MySQLstringtypesincludeVARCHAR,TEXT,CHAR,ENUM,andSET.1)VARCHARisversatileforvariable-lengthstringsuptoaspecifiedlimit.2)TEXTisidealforlargetextstoragewithoutadefinedlength.3)CHARisfixed-length,suitableforconsistentdatalikecodes.4)ENUMenforcesdatainte

What are the String Data Types in MySQL?What are the String Data Types in MySQL?May 10, 2025 am 12:01 AM

MySQLoffersvariousstringdatatypes:1)CHARforfixed-lengthstrings,2)VARCHARforvariable-lengthtext,3)BINARYandVARBINARYforbinarydata,4)BLOBandTEXTforlargedata,and5)ENUMandSETforcontrolledinput.Eachtypehasspecificusesandperformancecharacteristics,sochoose

How to Grant Permissions to New MySQL UsersHow to Grant Permissions to New MySQL UsersMay 09, 2025 am 12:16 AM

TograntpermissionstonewMySQLusers,followthesesteps:1)AccessMySQLasauserwithsufficientprivileges,2)CreateanewuserwiththeCREATEUSERcommand,3)UsetheGRANTcommandtospecifypermissionslikeSELECT,INSERT,UPDATE,orALLPRIVILEGESonspecificdatabasesortables,and4)

How to Add Users in MySQL: A Step-by-Step GuideHow to Add Users in MySQL: A Step-by-Step GuideMay 09, 2025 am 12:14 AM

ToaddusersinMySQLeffectivelyandsecurely,followthesesteps:1)UsetheCREATEUSERstatementtoaddanewuser,specifyingthehostandastrongpassword.2)GrantnecessaryprivilegesusingtheGRANTstatement,adheringtotheprincipleofleastprivilege.3)Implementsecuritymeasuresl

MySQL: Adding a new user with complex permissionsMySQL: Adding a new user with complex permissionsMay 09, 2025 am 12:09 AM

ToaddanewuserwithcomplexpermissionsinMySQL,followthesesteps:1)CreatetheuserwithCREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';.2)Grantreadaccesstoalltablesin'mydatabase'withGRANTSELECTONmydatabase.TO'newuser'@'localhost';.3)Grantwriteaccessto'

MySQL: String Data Types and CollationsMySQL: String Data Types and CollationsMay 09, 2025 am 12:08 AM

The string data types in MySQL include CHAR, VARCHAR, BINARY, VARBINARY, BLOB, and TEXT. The collations determine the comparison and sorting of strings. 1.CHAR is suitable for fixed-length strings, VARCHAR is suitable for variable-length strings. 2.BINARY and VARBINARY are used for binary data, and BLOB and TEXT are used for large object data. 3. Sorting rules such as utf8mb4_unicode_ci ignores upper and lower case and is suitable for user names; utf8mb4_bin is case sensitive and is suitable for fields that require precise comparison.

MySQL: What length should I use for VARCHARs?MySQL: What length should I use for VARCHARs?May 09, 2025 am 12:06 AM

The best MySQLVARCHAR column length selection should be based on data analysis, consider future growth, evaluate performance impacts, and character set requirements. 1) Analyze the data to determine typical lengths; 2) Reserve future expansion space; 3) Pay attention to the impact of large lengths on performance; 4) Consider the impact of character sets on storage. Through these steps, the efficiency and scalability of the database can be optimized.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment