当前位置: 首页 > news >正文

Oracle(76)如何收集统计信息?

收集统计信息是数据库管理系统(DBMS)优化查询性能的重要步骤。大多数现代DBMS都提供了自动和手动收集统计信息的功能。以下是一些常见的DBMS(如Oracle、MySQL、PostgreSQL、SQL Server)的详细示例和代码,说明如何收集统计信息。

Oracle

Oracle提供了DBMS_STATS包用于收集统计信息。

自动收集统计信息

Oracle默认会自动收集统计信息。可以通过设置STATISTICS_LEVEL参数来控制自动统计信息收集。

ALTER SYSTEM SET STATISTICS_LEVEL = TYPICAL;
手动收集统计信息

可以使用DBMS_STATS包手动收集统计信息。

收集表统计信息

BEGINDBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'TABLE_NAME');
END;

收集索引统计信息

BEGINDBMS_STATS.GATHER_INDEX_STATS('SCHEMA_NAME', 'INDEX_NAME');
END;

收集列统计信息

BEGINDBMS_STATS.GATHER_COLUMN_STATS('SCHEMA_NAME', 'TABLE_NAME', 'COLUMN_NAME');
END;

示例

假设有一个名为employees的表,手动收集其统计信息:

BEGINDBMS_STATS.GATHER_TABLE_STATS('HR', 'employees');
END;

MySQL

MySQL提供了ANALYZE TABLE命令用于收集统计信息。

自动收集统计信息

MySQL会在某些情况下自动更新统计信息,例如表中的数据发生显著变化时。

手动收集统计信息

收集表统计信息

ANALYZE TABLE employees;

示例

ANALYZE TABLE employees;

PostgreSQL

PostgreSQL提供了ANALYZE命令用于收集统计信息。

自动收集统计信息

PostgreSQL默认会自动收集统计信息。可以通过设置autovacuum参数来控制自动统计信息收集。

SET autovacuum = 'on';
手动收集统计信息

收集表统计信息

ANALYZE employees;

收集特定列的统计信息

ANALYZE employees (emp_department);

示例

ANALYZE employees;

SQL Server

SQL Server提供了UPDATE STATISTICS命令用于收集统计信息。

自动收集统计信息

SQL Server默认会自动收集统计信息。可以通过设置数据库选项来控制自动统计信息收集。

ALTER DATABASE [DatabaseName] SET AUTO_UPDATE_STATISTICS ON;
手动收集统计信息

收集表统计信息

UPDATE STATISTICS employees;

收集索引统计信息

UPDATE STATISTICS employees INDEX (index_name);

示例

UPDATE STATISTICS employees;

示例代码总结

创建表和插入数据

假设有一个名为employees的表:

CREATE TABLE employees (emp_id SERIAL PRIMARY KEY,emp_name VARCHAR(50),emp_department VARCHAR(50)
);INSERT INTO employees (emp_name, emp_department)
VALUES ('Alice', 'IT'), ('Bob', 'HR'), ('Charlie', 'IT'), ('David', 'Finance');
Oracle

手动收集表统计信息

BEGINDBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'employees');
END;
MySQL

手动收集表统计信息

ANALYZE TABLE employees;
PostgreSQL

手动收集表统计信息

ANALYZE employees;
SQL Server

手动收集表统计信息

UPDATE STATISTICS employees;

总结

收集统计信息是优化数据库查询性能的重要步骤。不同的数据库管理系统提供了不同的方法来收集统计信息,包括自动和手动方式。通过定期收集统计信息,可以确保查询优化器能够生成高效的查询执行计划,从而提高查询性能。了解如何在不同的DBMS中查看和收集统计信息,可以帮助识别和解决性能问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深度解析Python PyInstaller打包EXE的详细教程
  • C#发送邮件功能实现全面指南?有哪些方法?
  • C语言--01基础数据类型
  • 前端使用 Konva 实现可视化设计器(21)- 绘制图形(椭圆)
  • 【设计模式】六大原则-下
  • OpenAI 重回巅峰:ChatGPT-4O 最新模型超越谷歌 Gemini 1.5,多项测试夺冠!
  • C++ | Leetcode C++题解之第355题设计推特
  • QTday04
  • 复现 LET-NET
  • rust api接口开发(以登陆和中间件鉴权为例)
  • 企业高性能web服务器之nginx篇
  • 26-vector arraylist和linkedlist的区别
  • 保研考研机试攻略:第七章——图论(2)
  • 5 - Linux YUM仓库及NFS共享服务
  • 使用Element UI组件时,icon图标不显示
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Java编程基础24——递归练习
  • maven工程打包jar以及java jar命令的classpath使用
  • Tornado学习笔记(1)
  • 前嗅ForeSpider教程:创建模板
  • 悄悄地说一个bug
  • 微信支付JSAPI,实测!终极方案
  • 译有关态射的一切
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #pragam once 和 #ifndef 预编译头
  • (bean配置类的注解开发)学习Spring的第十三天
  • (多级缓存)多级缓存
  • (二)测试工具
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (五)MySQL的备份及恢复
  • (五)网络优化与超参数选择--九五小庞
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Family_物联网
  • .Net Core和.Net Standard直观理解
  • .net 获取url的方法
  • .net6+aspose.words导出word并转pdf
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .Net中的集合
  • .project文件
  • @Mapper作用
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [012-1].第12节:Mysql的配置文件的使用
  • [100天算法】-x 的平方根(day 61)
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [C/C++]数据结构 堆的详解