Oracle 12c新特性之如何检测有用的多列统计信息详解

Oracle 12c新特性之如何检测有用的多列统计信息详解

什么是多列统计信息

在Oracle数据库中,统计信息是优化器进行SQL执行计划选择的基础,而多列统计信息则是在多个列上的统计数据,可以帮助优化器更准确地选择最优的执行计划。Oracle 12c中新增了一些功能来方便检测和使用多列统计信息。

如何检测有用的多列统计信息

1. 使用DBMS_STATS.REPORT_MULTICOLUMN_COLUMN_STATS

这个过程可以用来报告一个或多个列的统计信息。在Oracle 12c中,该过程增加了一些新的参数来获取多列统计信息的相关信息。

下面是一个示例,报告表MY_TABLE上3个列的统计数据:

SET SERVEROUTPUT ON
DECLARE
    v_report clob;
BEGIN
    DBMS_STATS.REPORT_MULTICOLUMN_COLUMN_STATS(
        ownname=>'MY_SCHEMA',
        tabname=>'MY_TABLE',
        colnames=>SYS.ODCIVARCHAR2LIST('COLUMN1','COLUMN2','COLUMN3'),
        report=>v_report);
    dbms_output.put_line(v_report);
END;
/

这段代码将在控制台输出一个包含多列统计信息的报告。报告中包含各列的基数、不同值、直方图数据等。

2. 使用DBMS_STATS.SET_MULTICOLUMN_STATS

该过程可以用来设置多列统计信息。在Oracle 12c中,该过程增加了一些新的参数来设置多列统计信息的相关信息。

下面是一个示例,设置表MY_TABLE上3个列的多列统计信息:

BEGIN
    DBMS_STATS.SET_MULTICOLUMN_STATS(
        ownname=>'MY_SCHEMA',
        tabname=>'MY_TABLE',
        colnames=>SYS.ODCIVARCHAR2LIST('COLUMN1','COLUMN2','COLUMN3'),
        method_opt=>'FOR COLUMNS (COLUMN1, COLUMN2 SIZE AUTO, COLUMN3 SIZE 10)',
        no_invalidate=>FALSE);
END;
/

这段代码将设置MY_TABLE上3个列的多列统计信息,并指定了计算直方图数据的相关选项。

示例说明

示例1

假定我们有一个包含以下列的表:

  • ID:数字类型
  • NAME:字符串类型
  • AGE:数字类型
  • GENDER:字符串类型

现在我们希望在AGE和GENDER两列上创建多列统计信息,以优化查询“查询所有年龄为30岁的女性”。我们可以使用以下代码进行设置:

BEGIN
    DBMS_STATS.SET_MULTICOLUMN_STATS(
        ownname=>'MY_SCHEMA',
        tabname=>'MY_TABLE',
        colnames=>SYS.ODCIVARCHAR2LIST('AGE','GENDER'),
        method_opt=>'FOR COLUMNS (AGE,GENDER SIZE AUTO)',
        no_invalidate=>FALSE);
END;
/

这会在AGE和GENDER两列上创建多列统计信息,并启用直方图数据。

示例2

假定我们有一个包含以下列的表:

  • ID:数字类型
  • NAME:字符串类型
  • IMAGE:二进制类型

现在我们希望在NAME和IMAGE两列上创建多列统计信息,以优化查询包含IMAGE列的子句。我们可以使用以下代码进行设置:

BEGIN
    DBMS_STATS.SET_MULTICOLUMN_STATS(
        ownname=>'MY_SCHEMA',
        tabname=>'MY_TABLE',
        colnames=>SYS.ODCIVARCHAR2LIST('NAME','IMAGE'),
        method_opt=>'FOR COLUMNS (NAME SIZE AUTO, IMAGE SIZE 1000)',
        no_invalidate=>FALSE);
END;
/

这将在NAME和IMAGE两列上创建多列统计信息,并指定了IMAGE列的大小为1000字节。这有助于优化查询包含IMAGE列的子句的执行计划选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Oracle 12c新特性之如何检测有用的多列统计信息详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 浅谈MySQL的B树索引与索引优化小结

    我们来详细讲解一下“浅谈MySQL的B树索引与索引优化小结”的攻略。 浅谈MySQL的B树索引与索引优化小结 什么是B树索引? B树是一种多路平衡搜索树,常被用来实现关系型数据库中的索引。B树不同于二叉树,一个B树节点可以包含许多数据项以及指向其他节点的指针,被称为“分支节点”。B树一般用于磁盘存储系统中,可以有效减少磁盘I/O读取次数,提高数据的访问速度。…

    database 2023年5月19日
    00
  • 详解MySQL INNER JOIN:内连接

    MySQL INNER JOIN是一种关联查询方式,它会将两个表中符合指定条件的数据行进行匹配,返回这些数据匹配行的列结果。 MySQL INNER JOIN语法如下: SELECT 列1,列2,列3… FROM 表1 INNER JOIN 表2 ON 表1.列=表2.列 其中,SELECT语句用于选取需要返回的列。 FROM语句用于指定表名。 ON语句…

    MySQL 2023年3月9日
    00
  • 详解centos下搭建redis集群

    详解CentOS下搭建Redis集群 简介 Redis是一款高性能的Key-Value内存数据库,支持数据的持久化、一主多从的多机复制以及从机自动故障转移等功能。本文将介绍在CentOS环境下如何搭建Redis集群。 前置条件 在开始前,确保已满足以下条件: 已安装CentOS7操作系统; 已安装Redis。 搭建Redis集群流程 配置节点IP地址 在搭建…

    database 2023年5月22日
    00
  • ThinkPHP查询语句与关联查询用法实例

    首先我们需要了解一下ThinkPHP查询语句与关联查询的基本语法和用法。 查询数据 基础查询 常用的基础查询语句包括查询所有、查询单条数据和查询多条数据等。具体语法如下: 查询所有数据 php $list = Db::name(‘table’)->select(); 查询单条数据 php $info = Db::name(‘table’)->wh…

    database 2023年5月22日
    00
  • 百万级访问网站前期的技术准备小结

    以下是关于“百万级访问网站前期的技术准备小结”的完整攻略: 1. 硬件部署 对于一个百万级访问网站,硬件部署是至关重要的。如果服务器硬件配置不足以支撑高并发的流量,网站就会出现卡顿、甚至是崩溃的情况。因此,网站的硬件部署应该包括服务器数量、服务器的硬件配置、网络带宽等方面的考虑。 例如,一个普通的网站可以通过部署1台服务器来完成,而对于百万级别的网站,可能需…

    database 2023年5月21日
    00
  • idea 连接不上 redis解决办法

    客户端要能够成功连接上redis服务器,需要检查如下三个配置: 1.远程Linux防火墙已经关闭,以我这里的CentOS7为例,关闭防火墙命令 systemctl stop firewalld.service 同时还可以再补一刀 systemctl disable firewalld.service 表示禁止防火墙开机启动。 2.关闭redis保护模式,在r…

    Redis 2023年4月12日
    00
  • MySQL 5.0触发器参考教程第1/4页

    MySQL 5.0 触发器参考教程是一篇介绍 MySQL 5.0 触发器的教程,下面我将为您详细讲解其完整攻略: 1. 触发器介绍 触发器是一种特殊的存储过程,它在满足特定条件时自动执行,常用于实现数据的自动化处理等。触发器可以分为前置触发器和后置触发器两种类型,分别在触发事件(如插入、更新、删除等)前和后执行。 2. 创建触发器 使用 CREATE TRI…

    database 2023年5月22日
    00
  • Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤

    下面为您详细讲解添加外部Jar包以及配置多数据源的完整步骤。 添加外部Jar包 一、将Jar包放置到项目的lib目录下: 将外部Jar包放到项目的lib目录下,需要注意的是,这个lib目录需要在classpath里面注册,可以在maven pom.xml中添加以下代码实现: <dependency> <groupId>org.spri…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部