搜索
首页数据库mysql教程数据库索引统计信息
数据库索引统计信息Jun 07, 2016 pm 03:06 PM
oracle信息数据库社区索引统计进入

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 SQL Server 2005 允许创建有关列中值的分布情况的统计信息。查询优化器使用这些统计信息并通过估计使用索引评估查询的开销来确定最佳查询计划。 创建统计信息后,数据库引擎对列值(根据这些值创建

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

  SQL Server 2005 允许创建有关列中值的分布情况的统计信息。查询优化器使用这些统计信息并通过估计使用索引评估查询的开销来确定最佳查询计划。

  创建统计信息后,数据库引擎对列值(根据这些值创建统计信息)进行排序,并根据这些值(最多 200 个,按间隔分隔开)创建一个"直方图".直方图指定有多少行精确匹配每个间隔值,有多少行在间隔范围内,以及间隔中值的密度大小或重复值的发生率。

  SQL Server 2005 引入了对 char、varchar、varchar(max)、nchar、nvarchar、nvarchar(max)、text 和 ntext 列创建的统计信息收集的其他信息。这些信息称为"字符串摘要",可以帮助查询优化器估计字符串模式中查询谓词的选择性。查询中有 LIKE 条件时,使用字符串摘要可以更准确地估计结果集大小,并不断优化查询计划。这些条件包括诸如 WHERE ProductName LIKE '%Bike' 和 WHERE Name LIKE '[CS]heryl' 之类的条件。

  注意:

  如果列样本摘要的大小超过了数据库引擎可以维护的范围,则不对字符串摘要信息进行维护。例如,如果统计信息是使用 WITH FULLSCAN 对具有 85,000 行的表中唯一的varchar(80) 列(每个字符串中有 80 个字符,字符串之间几乎没有相似性)创建的,则不对这些统计信息的字符串摘要进行维护。若要确定是否为特定的统计信息对象存储了字符串摘要,请使用 DBCC SHOW_STATISTICS (Transact-SQL)。

  统计信息自动功能工作方式

  创建索引时,查询优化器自动存储有关索引列的统计信息。另外,当 AUTO_CREATE_STATISTICS 数据库选项设置为 ON(默认值)时,数据库引擎自动为没有用于谓词的索引的列创建统计信息。

  随着列中数据发生变化,索引和列的统计信息可能会过时,从而导致查询优化器选择的查询处理方法不是最佳的。例如,如果创建一个包含一个索引列和 1,000 行数据的表,每一行在索引列中的值都是唯一的,则查询优化器将把该索引列视为收集查询数据的好方法。如果更新列中的数据后存在许多重复值,则该列不再是用于查询的理想候选列。但是,查询优化器仍然根据索引的过时分布统计信息(基于更新前的数据),将其视为好的候选列。

  注意:

  在使用 SQL Server Management Studio 以图形方式显示查询的执行计划时,过时或缺少的统计信息将予以警告显示(表名称以红色文本显示)。有关详细信息,请参阅显示图形执行计划 (SQL Server Management Studio)。另外,使用 SQL Server Profiler 监视 Missing Column Statistics 事件类可以指明何时缺少统计信息。有关详细信息,请参阅 Errors and Warnings 事件类别(数据库引擎)。

  当 AUTO_UPDATE_STATISTICS 数据库选项设置为 ON(默认值)时,查询优化器会在表中的数据发生变化时自动定期更新这些统计信息。每当查询执行计划中使用的统计信息没有通过针对当前统计信息的测试时就会启动统计信息更新。采样是在各个数据页上随机进行的,取自表或统计信息所需列的最小非聚集索引。从磁盘读取一个数据页后,该数据页上的所有行都被用来更新统计信息。常规情况是:在大约有 20% 的数据行发生变化时更新统计信息。但是,查询优化器始终确保采样的行数尽量少。对于小于 8 MB 的表,则始终进行完整扫描来收集统计信息。

  采样数据(而不是分析所有数据)可以将统计信息自动更新的开销降至最低。在某些情况下,统计采样无法获得表中数据的精确特征。可以使用 UPDATE STATISTICS 语句的 SAMPLE 子句和 FULLSCAN 子句,控制按逐个表的方式手动更新统计信息时采样的数据量。FULLSCAN 子句指定扫描表中的所有数据来收集统计信息,而 SAMPLE 子句用来指定采样的行数百分比或采样的行数。

  统计信息异步更新

  启动更新过期统计信息的查询必须等待那些统计信息更新,之后才能编译并返回结果集。这会导致不可预知的查询响应时间,并可能导致应用程序因过长超时而失败。

  在 SQL Server 2005 中,数据库选项 AUTO_UPDATE_STATISTICS_ASYNC 提供了统计信息异步更新功能。当此选项设置为 ON 时,查询不等待统计信息更新,即可进行编译。而过期的统计信息置于队列中,由后台进程中的工作线程来更新。查询和任何其他并发查询都通过使用现有的过期统计信息立即编译。由于不存在等待更新后的统计信息的延迟,因此查询响应时间可预测;但是过期的统计信息可能导致查询优化器选择低效的查询计划。在更新后的统计信息就绪后启动的查询将使用那些统计信息。这可能会导致重新编译缓存的计划(取决于较旧的统计信息版本)。如果在同一个显式用户事务中出现某些数据定义语言 (DDL) 语句(例如,CREATE、ALTER 和 DROP 语句),则无法更新异步统计信息。

  AUTO_UPDATE_STATISTICS_ASYNC 选项设置于数据库级别,并确定用于数据库中所有统计信息的更新方法。它只适用于统计信息更新,而无法用于以异步方式创建统计信息。只有将 AUTO_UPDATE_STATISTICS 设置为 ON 时,将此选项设置为 ON 才有效。默认情况下,AUTO_UPDATE_STATISTICS_ASYNC 选项设置为 OFF.有关设置此选项的详细信息,请参阅 ALTER DATABASE (Transact-SQL)。

  在将数据库设置为 SINGLE_USER 之前,应验证 AUTO_UPDATE_STATISTICS_ASYNC 选项设置为 OFF.设置为 ON 时,用于更新统计信息的后台线程将与数据库建立连接,您将无法以单用户模式访问数据库。如果此选项设置为 ON,请执行以下任务:

  将 AUTO_UPDATE_STATISTICS_ASYNC 设置为 OFF.

  通过查询 sys.dm_exec_background_job_queue 动态管理视图来检查活动的异步统计信息作业。

  如果存在活动的作业,可以允许作业完成或通过使用 KILL STATS JOB 来手动终止这些作业。

  最佳实践注意事项

  如果您的应用程序出现以下情况,应考虑将 AUTO_UPDATE_STATISTICS_ASYNC 选项设置为 ON.

  遇到由一个或多个等待更新后的统计信息的查询导致的客户端请求超时。

  请求可预测查询响应时间,即使存在偶尔运行执行因过期统计信息导致的低效查询计划的查询的情况。

  查看异步更新统计信息属性

  若要查看 AUTO_UPDATE_STATISTICS_ASYNC 选项的 ON 或 OFF 状态,请从 sys.databases 目录视图中选择 is_auto_update_stats_async_on 列。有关详细信息,请参阅 sys.databases (Transact-SQL)。

  若要查看统计信息是否已经置于队列中等待更新或正在更新,请使用 sys.dm_exec_background_job_queue 动态管理视图。统计信息中,列 object_id1 为表或视图 ID,列 object_id2 为统计信息 ID.sys.dm_exec_background_job_queue_stats 动态管理视图用于查看所有后台作业队列的聚合统计信息,例如等待执行的作业请求数、失败的请求数以及以前提交的请求的平均执行时间。

  禁用统计信息自动功能

  可以按照以下方式针对特定列或索引禁用统计信息自动生成功能。

  使用 sp_autostats 系统存储过程。

  使用 CREATE INDEX 语句的 STATISTICS_NORECOMPUTE 子句。

  使用 UPDATE STATISTICS 语句的 NORECOMPUTE 子句。

  使用 CREATE STATISTICS 语句的 NORECOMPUTE 子句。

  使用 ALTER DATABASE 语句将 AUTO_CREATE_STATISTICS 和 AUTO_UPDATE_STATISTICS 数据库选项设置为 OFF.有关详细信息,请参阅设置数据库选项。

  如果指示数据库引擎不要自动维护统计信息,则必须手动更新统计信息。

  注意:

  除非指定了 NORECOMPUTE 子句,否则 UPDATE STATISTICS 语句将重新启用统计信息自动更新功能。

数据库索引统计信息

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
深入理解MySQL索引优化器工作原理深入理解MySQL索引优化器工作原理Nov 09, 2022 pm 02:05 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

sybase是什么数据库sybase是什么数据库Sep 22, 2021 am 11:39 AM

sybase是基于客户/服务器体系结构的数据库,是一个开放的、高性能的、可编程的数据库,可使用事件驱动的触发器、多线索化等来提高性能。

visual foxpro数据库文件是什么visual foxpro数据库文件是什么Jul 23, 2021 pm 04:53 PM

visual foxpro数据库文件是管理数据库对象的系统文件。在VFP中,用户数据是存放在“.DBF”表文件中;VFP的数据库文件(“.DBC”)中不存放用户数据,它只起将属于某一数据库的 数据库表与视图、连接、存储过程等关联起来的作用。

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

microsoft sql server是什么软件microsoft sql server是什么软件Feb 28, 2023 pm 03:00 PM

microsoft sql server是Microsoft公司推出的关系型数据库管理系统,是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理,具有使用方便可伸缩性好与相关软件集成程度高等优点。SQL Server数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使用户可以构建和管理用于业务的高可用和高性能的数据应用程序。

access数据库的结构层次是什么access数据库的结构层次是什么Aug 26, 2022 pm 04:45 PM

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

go语言可以写数据库么go语言可以写数据库么Jan 06, 2023 am 10:35 AM

go语言可以写数据库。Go语言和其他语言不同的地方是,Go官方没有提供数据库驱动,而是编写了开发数据库驱动的标准接口,开发者可以根据定义的接口来开发相应的数据库驱动;这样做的好处在于,只要是按照标准接口开发的代码,以后迁移数据库时,不需要做任何修改,极大方便了后期的架构调整。

mysql查询慢的因素除了索引,还有什么?mysql查询慢的因素除了索引,还有什么?Jul 19, 2022 pm 08:22 PM

mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题。遇到这种问题,我们一般也会想到是因为索引。那除开索引之外,还有哪些因素会导致数据库查询变慢呢?

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。