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

yizhihongxing

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日

相关文章

  • 银河麒麟V10sp1服务器系统安装redis不能使用的快速解决办法

    下面是“银河麒麟V10sp1服务器系统安装redis不能使用的快速解决办法”的完整攻略。 问题描述 在银河麒麟V10sp1服务器系统上安装redis后,发现无法使用redis服务。 解决步骤 步骤一:检查redis服务是否启动 通过以下命令检查redis服务是否启动: systemctl status redis.service 如果显示为: redis.s…

    database 2023年5月22日
    00
  • CentOS 6.5 x64系统中安装MongoDB 2.6.0二进制发行版教程

    标题: CentOS 6.5 x64系统中安装MongoDB 2.6.0二进制发行版教程 简介 本文将介绍在 CentOS 6.5 x64 系统中安装 MongoDB 2.6.0 二进制发行版的详细步骤。这个方法可以适用于服务器和非服务器环境。 步骤 1. 准备工作 在开始安装前,我们需要先检查系统是否具有一些必要程序: $ yum -y update $ …

    database 2023年5月22日
    00
  • MySQL查询缓存优化示例详析

    下面我将为你详细讲解“MySQL查询缓存优化示例详析”的完整攻略。 简介 MySQL查询缓存是一个很重要的特性,能够提高查询性能,但是由于其设计限制,会存在很多性能问题。本文将会详细介绍MySQL查询缓存的性能瓶颈以及如何进行优化。 MySQL查询缓存的性能瓶颈 MySQL查询缓存有以下几个性能瓶颈: 查询缓存是基于查询语句进行缓存的,如果两个查询语句不完全…

    database 2023年5月19日
    00
  • Python2.x利用commands模块执行Linux shell命令

    使用commands模块可以方便地在Python中执行Linux shell命令。但需要注意的是,commands模块在Python 2.6之后已不再被支持,应该使用subprocess模块代替。 以下是使用commands模块执行Linux shell命令的攻略: 导入commands模块 import commands 获取命令的输出 调用command…

    database 2023年5月22日
    00
  • MySQL 同主机不同数据库之间的复制

    MySQL同主机不同数据库的复制命令:注意运行在Terminal中,不运行在MySQL命令行中。 mysqldump Portal_DEV -u root -ppassword1 –add-drop-table | mysql Portal_Optimize -u root -ppassword1 在复制过程中,出现如下报错: ERROR 1153 (08…

    MySQL 2023年4月16日
    00
  • linux之普通用户与root用户之间切换方法

    当我们使用Linux操作系统时,为了安全起见,我们通常会分配两种用户权限: 普通用户和root超级管理员。普通用户不具备系统的一些核心管理权限,这样在使用系统时就能够有效的保护系统的稳定性和安全性。但有时候,我们需要使用root用户的权限去执行一些操作,这时就需要使用以下的方法进行用户切换。 1. 利用su命令切换用户 su命令是Linux系统下经典的用户切…

    database 2023年5月22日
    00
  • JavaScript中的Promise使用详解

    JavaScript中的Promise使用详解 什么是Promise? Promise是一种用来处理异步请求的解决方案,它可以使得异步代码更加易于阅读和编写。Promise可以将异步请求进行封装,让代码具有更好的可读性和可维护性。 如何使用Promise? 在JavaScript中,Promise是构造函数,通过new来创建一个Promise对象。 cons…

    database 2023年5月22日
    00
  • Redis基础命令

           笔者最初接触Redis是因为了解了一些nosql方面的知识,觉得nosql是一个很有意思的方面。像其中的mongodb,redis等等。当初也没有深入的去了解Redis,直到自己前段时间在写一个web项目的时候需要用到缓存来进行性能优化我才仔细的来学习Redis。下面我就来说说我自己在学习Redis过程中的一些心得。         Redis…

    Redis 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部