首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在CREATE INDEX之后更新统计信息?

在CREATE INDEX之后更新统计信息是为了保证数据库查询优化器能够正确评估查询计划的成本,并选择最优的执行路径。索引是数据库中用于提高查询性能的重要工具,而统计信息则提供了关于表和索引的数据分布、数据密度和数据分布的信息。

当我们在数据库中创建索引(CREATE INDEX)时,数据库会根据表中的数据生成统计信息。这些统计信息包括表的行数、列的唯一值数量、列的数据分布等。查询优化器使用这些统计信息来估计查询的成本,并决定使用哪个索引或执行路径来执行查询。

然而,当我们对表进行大量的数据修改操作(如插入、更新、删除)后,表中的数据分布可能会发生变化,原有的统计信息就会变得不准确。这会导致查询优化器做出错误的决策,选择了不合适的执行路径,从而影响查询性能。

为了解决这个问题,我们需要在CREATE INDEX之后更新统计信息。更新统计信息的方式可以是手动触发,也可以是自动触发。手动触发可以使用数据库提供的命令或工具来执行,比如在Oracle数据库中可以使用DBMS_STATS包来更新统计信息。自动触发可以通过设置数据库的自动统计信息收集功能来实现,数据库会在一定条件下自动收集并更新统计信息。

更新统计信息的频率取决于数据库中数据的变化程度和查询性能的要求。如果数据变化频繁,可以考虑更频繁地更新统计信息;如果数据变化较少,可以适当延长更新统计信息的间隔。

总结起来,更新统计信息是为了保证查询优化器能够正确评估查询计划的成本,并选择最优的执行路径。通过更新统计信息,可以提高数据库查询的性能和效率。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL统计信息更新小结

针对扫描行数,实际上MySQL真正开始执行语句之前,并不能精确地知道满足这个条件的记录有多少条。它是通过统计信息来估算记录数的。这个统计信息就是索引的“区分度”。...MySQL中,有两种存储索引统计的方式,可以通过设置参数innodb_stats_persistent的值来选择:设置为on的时候,表示统计信息会持久化存储。这时,默认的N是20,M是10。...MySQL 统计信息更新默认情况下innodb_stats_persistent=ON,优化器的统计信息会持久化保存在mysql.innodb_table_stats和mysql.innodb_index_stats...以下几种情况,不管innodb_stats_auto_recalc是ON还是OFF,都会更新innodb_index_stats表的索引统计信息:表增加索引表增加或者删除字段innodb_table_stats...和innodb_index_stats这2个表的统计数据,其实也可以通过手动方式去修改它(直接update表数据),修改后,需要执行一下FLUSH TABLE命令更新对应的表统计信息让它加载生效.

2.6K20

MySQL索引统计信息更新相关的参数

也就是说innodb_stats_persistent 配置为OFF的时候,非持久化存储统计信息的手,innodb_stats_on_metadata的设置才生效。     ...,都不影响持久化存储统计信息的索引     某个索引的统计信息更新时间参考mysql.innodb_index_stats这个系统表 某个索引的统计信息更新时间参考mysql.innodb_index_stats...4. innodb_stats_persistent_sample_pages (持久化更新统计信息时候索引页的取样页数)     默认是20个page,如果设置的过高,那么更新统计信息的时候,会增加...统计信息更新测试1:打开innodb_stats_auto_recalc的情况下,统计信息会在触发其更新阈值后自动更新 查询统计信息更新时间 收集统计信息之后再次查询,innodb_index_stats...的情况下),只有通过手动收集才能完成统计信息更新 MySQL可以表上指定一个统计信息取样的page个数,并且可以修改表上的统计取样page个数 -- 创建表的时候指定一个统计取样page数据 create

1.4K31

「Mysql索引原理(十六)」维护索引和表-更新索引统计信息

MyISAM将索引统计信息存储磁盘中, ANALYZE TABLE需要进行一次全索引扫描来计算索引基数。整个过程中需要锁表。... MySQL5.0和更新的版本中,还可以通过 FORMATION_SCHEMA. STATISTICS表很方便地查询到这些信息。...InnoDB在打开某些INF0RMATION_SCHEMA表,或者使用 SHOW TABLE STATUS和SHOW INDEX,抑或在MySQL客户端开启自动补全功能的时候都会触发索引统计信息更新。...客户端或者监控程序触发索引信息采样更新时可能会导致大量的锁,并给服务器带来很多的额外压力,这会让用户因为启动时间漫长而沮丧。只要SHOW INDEX查看索引统计信息,就一定会触发统计信息更新。...一旦关闭索引统计信息的自动更新,那么就需要周期性地使用ANALYZE TABLE来手动更新。否则,索引统计信息就会永远不变。如果数据分布发生大的变,可能会出现一些很糟糕的执行计划。

2K40

【DB笔试面试649】Oracle中,分区表统计信息更新机制是怎样的?

♣ 题目部分 Oracle中,分区表统计信息更新机制是怎样的?...♣ 答案部分 分区表统计信息更新机制如下所示: ① 当某个分区的数据变化达到10%,自动收集统计信息任务运行时,Oracle会更新该分区的统计信息。...② 当分区表中所有分区中数据变化量的总和达到分区表总数据量的10%,Oracle会更新该分区表的统计信息。...另外,需要注意的是,更新分区表的统计信息时,10.2.0.5之前必须要扫描该表所有的分区或整个表的数据,而从10.2.0.5开始,可以设置分区表按增量变化统计,只收集有数据变化的分区。...要设置分区表按增量变化统计,可以设置表统计信息的INCREMENTAL属性。

95810

【DB笔试面试632】Oracle中,如何锁住统计信息

♣ 题目部分 Oracle中,如何锁住统计信息? ♣ 答案部分 Oracle会自动收集表的统计信息,大部分情况下,这种行为是有利的。...当不需要对某个表做收集的时候,可以采用锁定统计信息的方法,把不需要收集的表排除在外,这样可以使得此表上的统计信息不变,如下所示: EXEC DBMS_STATS.LOCK_TABLE_STATS();...DBMS_STATS.UNLOCK_SCHEMA_STATS();--解锁用户统计信息 如果在锁定条件下收集统计信息,那么会出现如下报错: ERROR at line 1: ORA-20005:...: SELECT D.OWNER, D.INDEX_NAME, D.TABLE_OWNER, D.TABLE_NAME, D.PARTITION_NAME...若要保持统计信息不被覆盖,则必须利用DBMS_STATS包将统计信息锁住。 本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

98120

【DB笔试面试630】Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息

♣ 题目部分 Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?...♣ 答案部分 主要采用DBMS_STATS.GATHER_TABLE_STATS包进行统计信息的收集,如下所示: DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME...DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME',PARTNAME=>'PT_PART_NAME',GRANULARITY=>'PARTITION',CASCADE=>TRUE);--针对分区表的单个分区进行收集统计信息...除此之外,还有一些其它的用法,如下所示: l EXEC DBMS_STATS.GATHER_DATABASE_STATS();--收集当前数据库下所有用户的统计信息 l EXEC DBMS_STATS.GATHER_SCHEMA_STATS...(USER);--收集用户下所有对象的统计信息 当系统的分区表数据量很大时,如果每次都收集全部的分区必然会导致统计信息的收集非常慢,Oracle 11g之后可以通过设置INCREMENTAL来只针对数据有变动的分区做收集

97330

【DB笔试面试644】Oracle中,如何并发地收集统计信息

♣ 题目部分 Oracle中,如何并发地收集统计信息? ♣ 答案部分 对于大表的统计信息收集可以通过DEGREE参数使得扫描大表的时候进行并行扫描,从而加快扫描速度,缩短了收集统计信息的时间。...但是,即使加了DEGREE参数,收集统计信息的时候,还是进行一个表一个表的扫描,并没有并发的同时扫描多个表。...Oracle 11.2.0.2之后,有了一个参数,可以并发扫描表,这就是CONCURRENT参数。...并发收集统计信息时,数据库生成的JOB数会根据具体情况来分配。...: (1)用CONCURRENT收集统计信息,需要收集统计信息的用户具有CREATE JOB、MANAGE SCHEDULER和MANAGE ANY QUEUE权限。

55720

【DB笔试面试629】Oracle中,自动收集统计信息的机制有哪些?10g和11g自动收集统计信息方面有哪些区别?

♣ 题目部分 Oracle中,自动收集统计信息的机制有哪些?10g和11g自动收集统计信息方面有哪些区别?...Oracle 10g之前并没有自动收集统计信息的机制,从Oracle 10g开始引入了自动收集统计信息的功能,这个功能在Oracle 10g中被称为自动统计信息收集(Automatic Statistics...Gathering),Oracle 11g中被称为自动优化器统计信息收集(Automatic Optimizer Statistics Collection)。...时或自上次自动统计信息收集作业完成之后目标表被执行过TRUNCATE操作,那么该表的统计信息就变为陈旧状态,Oracle就会在指定时间段自动收集统计信息。...Oracle 10g中,这个10%(STALE_PERCENT)是无法修改的,如果表非常大,那么10%其实是非常多的数据,这就造成统计信息不准确。

67810

【DB笔试面试633】Oracle中,什么是待定的统计信息(Pending Statistic)?

更进一步,就是新的统计信息更新,无论是手动收集还是自动收集,能否促进SQL语句生成更高效的执行计划。所以,一种思路是:新的统计信息收集生成时,暂时不要生效投入执行计划生成。...等待最后确认统计信息正确之后,再投入生产环境。 Oracle 11g中,推出了统计信息管理的一种新技术——待定的统计信息(Pending Statistic)技术。...设置PENDING属性之后,数据的统计信息在数据字典中相当于已经锁定。当新的统计信息生成之后,不是直接替换原有的数据,而是存放在PENDING数据字典中。...PENDING字典中的统计信息默认情况下是不会参与SQL执行计划的生成的。只有进行SQL测试通过的时候,经过用户手工的确定,才会将其PUBLISH出来,替换原有的统计信息。...NAME FROM DUAL CONNECT BY LEVEL<= 10000 ; CREATE INDEX IDX_T_PS_20170605_LHR_ID ON T_PS_20170605_LHR(

68620

姚班、智班之后,量子信息清华成立,姚期智担纲,“致力国家战略需求”!

大数据文摘出品 新华社昨天的官方微博发布了一则消息显示,继计算机科学实验班(姚班),人工智能班(智班)之后,第三个拔尖创新人才项目——量子信息清华大学宣布成立。...量子信息中心长期以来量子信息领域的耕耘和研究成果,应该就是交叉信息学院此次成立量子信息班的坚实基础。...姚期智的研究方向包括计算理论及其密码学和量子计算中的应用,2000年,对计算理论包括伪随机数生成,密码学与通信复杂度的突出贡献使姚期智教授荣膺图灵奖(A.M....2018年,《世界人工智能大会》上,姚期智《人工智能:现状与未来》主题演讲中也发表过对于量子信息的看法: “量子物理是最深入、最美丽、最根本的关于宇宙、物理、大自然设计的法则;但是随着量子计算的发展...清华大学量子信息班计划于2021年启动招生,首批计划招收20人,主要面向2021年参加高考且各省本科一批次或保送生批次可被清华录取的学生进行二次选拔,其要求是申请学生须对量子信息领域有浓厚兴趣,并表现出较强的发展潜力

70240

【DB笔试面试645】Oracle中,当收集表的统计信息时应该注意哪些问题?

♣ 题目部分 Oracle中,当收集表的统计信息时应该注意哪些问题?...② 导入大量数据后应及时收集统计信息后才能进行相关的后续业务处理(包括查询和修改),否则可能会由于实际数据量和统计信息里记录的数据量存在巨大差异而导致CBO选择错误的执行计划。...⑧ 内部对象统计信息明确诊断出系统已有的性能问题是因为X$表的内部对象统计信息不准引起的,这个时候就应该收集X$表的内部对象统计信息,其它情形就不要收集了。...有些DBA收集统计信息时,没有使用NO_INVALIDATE=>FALSE选项,所以,即使收集了统计信息,执行计划也不会立即改变。...⑳ 检查是否有临近统计信息收集窗口的数据加载工作,如果有,是否能在数据库统计信息的窗口时间完成,如果不能在窗口时间完成,那么应该针对这段时间加载的数据,特别是大量的数据,相关加载脚本完成之后,加入统计信息的收集

1.2K30

MySQL 统计信息简介

有两种方式可以设置为非持久化统计信息: 1 全局变量, INNODB_STATS_PERSISTENT=OFF2 CREATE/ALTER表的参数, STATS_PERSISTENT=0 非持久化统计信息以下情况会被自动更新...持久化统计信息以下情况会被自动更新: 1 INNODB_STATS_AUTO_RECALC=ON 情况下,表中10%的数据被修改2 增加新的索引 innodb_table_stats是表的统计信息,...数据库名table_name表名index_name索引名last_update统计信息最后一次更新时间stat_name统计信息名stat_value统计信息的值sample_size采样大小stat_description...3、对于非唯一索引,会在原有列之后加上主键索引,如index_name=’i1’ and stat_name=’n_diff_pfx03’,原索引列c,d后加了主键列a,(c,d,a)的distinct...三、统计信息不准确的处理 我们查看执行计划,发现未使用正确的索引,如果是innodb_index_stats中统计信息差别较大引起,可通过以下方式处理: 1、手动更新统计信息,注意执行过程中会加读锁:

2.1K10

MySQL统计信息简介

有两种方式可以设置为非持久化统计信息: 1 全局变量, INNODB_STATS_PERSISTENT=OFF2 CREATE/ALTER表的参数, STATS_PERSISTENT=0 非持久化统计信息以下情况会被自动更新...持久化统计信息以下情况会被自动更新: 1 INNODB_STATS_AUTO_RECALC=ON 情况下,表中10%的数据被修改2 增加新的索引 innodb_table_stats是表的统计信息,...数据库名table_name表名index_name索引名last_update统计信息最后一次更新时间stat_name统计信息名stat_value统计信息的值sample_size采样大小stat_description...3、对于非唯一索引,会在原有列之后加上主键索引,如index_name=’i1’ and stat_name=’n_diff_pfx03’,原索引列c,d后加了主键列a,(c,d,a)的distinct...三、统计信息不准确的处理 我们查看执行计划,发现未使用正确的索引,如果是innodb_index_stats中统计信息差别较大引起,可通过以下方式处理: 1、手动更新统计信息,注意执行过程中会加读锁:

2.5K20

统计信息记录表|全方位认识 mysql 系统库

如果innodb_stats_auto_recalc变量未启用,您还可以CREATE TABLE或ALTER TABLE语句中使用STATS_AUTO_RECALC子句为单个表配置统计信息自动重新计算功能...子句)来覆盖系统变量设置的值,建表选项可以CREATE TABLE或ALTER TABLE语句中指定。...启用之后当表中数据的10%发生变更时会重新计算统计信息。...innodb_table_stats和innodb_index_stats表是普通表,可以手动执行更新。通过手动更新统计信息的功能,可以强制执行特定的查询优化计划或测试备选计划,而无需修改数据库。...index_name:索引名称。 last_update:表示InnoDB上次更新统计信息行的时间戳。 stat_name:统计信息名称,其对应的统计信息值保存在stat_value列。

1K30

图形数据库Neo4j基本了解

Neo4j图形节点的一个或多个属性上创建索引,索引创建完成之后,当图形数据更新时,Neo4j负责索引的自动更新,索引的数据是实时同步的;查询被索引的属性时,Neo4j自动应用索引,以获得查询性能的提升...默认情况下,Neo4j自动更新统计信息,但是,统计信息更新不是实时的,更新统计信息可能是一个非常耗时的操作,因此,Neo4j在后台运行,并且只有当变化的数据达到一定的阈值时,才会更新统计信息。...通过配置选项,Neo4j能够控制执行计划的重新生成: dbms.index_sampling.background_enabled:是否在后台统计索引信息,由于Cypher查询的执行计划是根据统计信息生成的...,及时更新索引的统计数据对生成性能优化的执行计划非常重要; dbms.index_sampling.update_percentage:更新索引的统计信息之前,索引中有多大比例的数据被更新; cypher.statistics_divergence_threshold...:当统计信息变化时,Neo4j不会立即更新Cypher查询的执行计划;只有当统计信息变化到一定的程度时,Neo4j才会重新生成执行计划。

2.8K20
领券