Oracle 12c新特性之怎么检测有用的多列统计信息
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章给大家分享的是有关Oracle 12c新特性之怎么检测有用的多列统计信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、环境准备首先,我们创建测试表custome
千家信息网最后更新 2025年01月21日Oracle 12c新特性之怎么检测有用的多列统计信息
这篇文章给大家分享的是有关Oracle 12c新特性之怎么检测有用的多列统计信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、环境准备
首先,我们创建测试表customers_test,基于sh示例用户下的customers表。
SQL> select banner from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit ProductionPL/SQL Release 12.1.0.2.0 - ProductionCORE 12.1.0.2.0 ProductionTNS for Linux: Version 12.1.0.2.0 - ProductionNLSRTL Version 12.1.0.2.0 - ProductionSQL> SQL> conn sh/sh@HOEGHConnected.SQL> SQL> DROP TABLE customers_test;DROP TABLE customers_test *ERROR at line 1:ORA-00942: table or view does not existSQL> CREATE TABLE customers_test AS SELECT * FROM customers;Table created.SQL> select count(*) from customers_test; COUNT(*)---------- 55500SQL>
二、收集统计信息
SQL> SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(user, 'customers_test');PL/SQL procedure successfully completed.SQL>
三、开启负载监控
另外打开一个会话,通过sys用户登录,开启负载监控。其中,SEED_COL_USAGE的第三个参数表示监控的时间,单位是秒,300表示5分钟。
SQL> show userUSER is "SYS"SQL> BEGIN DBMS_STATS.SEED_COL_USAGE(null,null,300);END;/ 2 3 4PL/SQL procedure successfully completed.SQL>
四、使用explain plan for查询执行计划
SQL> SQL> EXPLAIN PLAN FOR SELECT * FROM customers_test WHERE cust_city = 'Los Angeles' AND cust_state_province = 'CA' AND country_id = 52790; 2 3 4 5 6 Explained.SQL> SQL> SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('plan_table', null,'basic rows')); 2 PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------Plan hash value: 2112738156----------------------------------------------------| Id | Operation | Name | Rows |----------------------------------------------------| 0 | SELECT STATEMENT | | 1 || 1 | TABLE ACCESS FULL| CUSTOMERS_TEST | 1 |----------------------------------------------------8 rows selected.SQL>
从执行计划来看,查询结果只有1列。我们暂且记下这个结果。
五、查看列使用信息
此时,我们可以通过REPORT_COL_USAGE来查看列的使用信息。
我们看到,Oracle帮我们检测到了一个有用的列组信息,包括customers_test、cust_city和cust_state_province三列。
SQL> SQL> SET LONG 100000SQL> SET LINES 120SQL> SET PAGES 0SQL> SELECT DBMS_STATS.REPORT_COL_USAGE(user, 'customers_test') 2 FROM DUAL;LEGEND:.......EQ : Used in single table EQuality predicateRANGE : Used in single table RANGE predicateLIKE : Used in single table LIKE predicateNULL : Used in single table is (not) NULL predicateEQ_JOIN : Used in EQuality JOIN predicateNONEQ_JOIN : Used in NON EQuality JOIN predicateFILTER : Used in single table FILTER predicateJOIN : Used in JOIN predicateGROUP_BY : Used in GROUP BY expression...............................................................................###############################################################################COLUMN USAGE REPORT FOR SH.CUSTOMERS_TEST.........................................1. COUNTRY_ID : EQ2. CUST_CITY : EQ3. CUST_STATE_PROVINCE : EQ4. (CUST_CITY, CUST_STATE_PROVINCE, COUNTRY_ID) : FILTER###############################################################################SQL>
六、创建扩展统计信息
检测工作完成后,我们可以通过CREATE_EXTENDED_STATS方法来创建扩展统计信息。其中,黄色标注部分就是创建对象的名称。
SQL> SQL> SELECT DBMS_STATS.CREATE_EXTENDED_STATS(user, 'customers_test') FROM DUAL;###############################################################################EXTENSIONS FOR SH.CUSTOMERS_TEST................................1. (CUST_CITY, CUST_STATE_PROVINCE, COUNTRY_ID) : SYS_STUMZ$C3AIHLPBROI#SKA58H_N created###############################################################################SQL>
七、重新收集统计信息
SQL> SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'customers_test');PL/SQL procedure successfully completed.SQL>
八、查看USER_TAB_COL_STATISTICS,确认列统计信息
通过查询USER_TAB_COL_STATISTICS,我们可以获取到刚刚创建的列组对象,和第6步的输出结果是一致的。
SQL> SQL> COL COLUMN_NAME FOR A30SQL> SELECT COLUMN_NAME, NUM_DISTINCT, HISTOGRAMFROM USER_TAB_COL_STATISTICSWHERE TABLE_NAME = 'CUSTOMERS_TEST'ORDER BY 1; 2 3 4 COUNTRY_ID 19 FREQUENCYCUST_CITY 620 HYBRIDCUST_CITY_ID 620 NONECUST_CREDIT_LIMIT 8 NONECUST_EFF_FROM 1 NONECUST_EFF_TO 0 NONECUST_EMAIL 1699 NONECUST_FIRST_NAME 1300 NONECUST_GENDER 2 NONECUST_ID 55500 NONECUST_INCOME_LEVEL 12 NONECUST_LAST_NAME 908 NONECUST_MAIN_PHONE_NUMBER 51344 NONECUST_MARITAL_STATUS 11 NONECUST_POSTAL_CODE 623 NONECUST_SRC_ID 0 NONECUST_STATE_PROVINCE 145 FREQUENCYCUST_STATE_PROVINCE_ID 145 NONECUST_STREET_ADDRESS 49900 NONECUST_TOTAL 1 NONECUST_TOTAL_ID 1 NONECUST_VALID 2 NONECUST_YEAR_OF_BIRTH 75 NONESYS_STUMZ$C3AIHLPBROI#SKA58H_N 620 HYBRID24 rows selected.SQL>
九、重新查询执行计划
我们看到,在第4步中查询执行计划中,Rows为1;现在呢,是867。这差距也忒大了点儿。
SQL> SQL> EXPLAIN PLAN FOR SELECT * FROM customers_test WHERE cust_city = 'Los Angeles' AND cust_state_province = 'CA' AND country_id = 52790; 2 3 4 5 6 Explained.SQL> SQL> SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('plan_table', null,'basic rows')); 2 Plan hash value: 2112738156----------------------------------------------------| Id | Operation | Name | Rows |----------------------------------------------------| 0 | SELECT STATEMENT | | 867 || 1 | TABLE ACCESS FULL| CUSTOMERS_TEST | 867 |----------------------------------------------------8 rows selected.SQL>
感谢各位的阅读!关于"Oracle 12c新特性之怎么检测有用的多列统计信息"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
信息
统计
查询
检测
有用
结果
监控
特性
内容
可以通过
对象
更多
用户
篇文章
不错
实用
一致
三个
单位
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
艾泰虚拟服务器
mem 软件开发
网络安全教育班会文案
什么是汽车网络技术
物料备件管理软件开发
有关网络安全防诈骗的演讲稿
数据库设计根本目标是要解决
沙迳服务器
网络安全工程师要会编程吗
数据库表id重复
cf好友服务器连接不了
数据库技术及应用教程姚
服务器支持千兆不支持百兆
android 数据库设计
tp3.2.1配置数据库
ipad检查服务器名称或ip
嵌入软件式开发和软件开发
护苗网络安全课 通知
软件开发我为什么都配几个显示屏
计算机网络技术与网络工程
黑客对网络安全带来的影响6
魔兽怀旧服各个版本的服务器
联机服务器
互联网金融科技公司党建岗
服务器提交了协议冲突
国内校园网络安全研究综述
路由器设置主域名服务器
ip地址dhcp服务器
科轩网络技术有限公司待遇
国家网络安全百问