Oracle直方图的限制往往让不少初学者头痛mdash;mdash;超过32字节不显示,以及前32字节相同产生错误。由于OBJECT_TYPE列上的DIS
Oracle直方图的限制往往让不少初学者头痛——超过32字节不显示,以及前32字节相同产生错误。
由于OBJECT_TYPE列上的DISTINCT值的个数小于254,ORACLE将会在此列上建立频率直方图,优化器将会准确的估算出CONTENTS='TABLE'的查询返回37条记录。
下面看看如下的情况:
SQL> TRUNCATE TABLE T;
Table truncated.
SQL> SET AUTOT OFF
SQL> INSERT INTO T
2 SELECT ROWNUM,OBJECT_NAME,RPAD('*',32,'*')||OBJECT_TYPE
3 FROM ALL_OBJECTS WHERE ROWNUM
10000 rows created.
SQL> COMMIT;
Commit complete.
SQL> SELECT COUNT(1) FROM T;
COUNT(1)
----------
10000
SQL> SELECT CONTENTS ,COUNT(1) FROM T GROUP BY CONTENTS ;
CONTENTS COUNT(1)
-------------------------------------------------- ----------
********************************SEQUENCE 1
********************************LIBRARY 3
********************************WINDOW GROUP 1
********************************INDEX PARTITION 347
********************************PACKAGE 164
********************************SCHEDULE 1
********************************TABLE PARTITION 25
********************************VIEW 1150
********************************TABLE 37
********************************PROCEDURE 11
********************************CONSUMER GROUP 2
********************************INDEX SUBPARTITION 3328
********************************OPERATOR 15
********************************WINDOW 2
********************************INDEX 34
********************************FUNCTION 60
********************************SYNONYM 2552
********************************TABLE SUBPARTITION 1714
********************************TYPE 538
********************************JOB CLASS 1
********************************PACKAGE BODY 13
********************************EVALUATION CONTEXT 1
22 rows selected.
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T',method_opt=>'FOR COLUMNS CONTENTS SIZE 254');
PL/SQL procedure successfully completed.
SQL> SELECT * FROM T WHERE CONTENTS='********************************TABLE';
Execution Plan
----------------------------------------------------------
Plan hash value: 2153619298
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10000 | 654K| 24 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 10000 | 654K| 24 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("CONTENTS"='********************************TABLE')
由于CONTENTS列的前32位都一样,ORACLE在收集统计信息直方图的时候只考虑前32位,这会导致ORACLE认为
所有的记录的列CONTENTS都是相同的,因此优化器估算返回的行数为10000。
SQL> UPDATE T SET CONTENTS=SUBSTR(CONTENTS,2);
10000 rows updated.
SQL> COMMIT;
Commit complete.
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T',method_opt=>'FOR COLUMNS CONTENTS SIZE 254');
PL/SQL procedure successfully completed.
SQL> SELECT CONTENTS ,COUNT(1) FROM T GROUP BY CONTENTS ORDER BY 1;
CONTENTS COUNT(1)
-------------------------------------------------- ----------
*******************************CONSUMER GROUP 2
*******************************EVALUATION CONTEXT 1
*******************************FUNCTION 60
*******************************INDEX 34
*******************************INDEX PARTITION 347
*******************************INDEX SUBPARTITION 3328
*******************************JOB CLASS 1
*******************************LIBRARY 3
*******************************OPERATOR 15
*******************************PACKAGE 164
*******************************PACKAGE BODY 13
*******************************PROCEDURE 11
*******************************SCHEDULE 1
*******************************SEQUENCE 1
*******************************SYNONYM 2552
*******************************TABLE 37
*******************************TABLE PARTITION 25
*******************************TABLE SUBPARTITION 1714
*******************************TYPE 538
*******************************VIEW 1150
*******************************WINDOW 2
*******************************WINDOW GROUP 1
SQL> SELECT SUBSTR(CONTENTS,1,32),COUNT(1) FROM T GROUP BY SUBSTR(CONTENTS,1,32);
SUBSTR(CONTENTS,1,32) COUNT(1)
---------------------------------------- ----------
*******************************E 1
*******************************J 1
*******************************P 188
*******************************C 2
*******************************S 2554
*******************************T 2314
*******************************F 60
*******************************O 15
*******************************L 3
*******************************W 3
*******************************I 3709
*******************************V 1150
12 rows selected.
SQL> SET AUTOT TRACEONLY EXP
SQL> SELECT * FROM T WHERE CONTENTS='*******************************TABLE';
Execution Plan
----------------------------------------------------------
Plan hash value: 2153619298
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2314 | 149K| 24 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 2314 | 149K| 24 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("CONTENTS"='*******************************TABLE')
SQL> SELECT * FROM T WHERE CONTENTS='*******************************TYPE';
Execution Plan
----------------------------------------------------------
Plan hash value: 2153619298
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2314 | 149K| 24 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T | 2314 | 149K| 24 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("CONTENTS"='*******************************TYPE')
从上面可以看出,ORACLE只考虑前32个字节,下面每一个值查询的估算行数都是等于3者实际记录数之和。
*******************************TABLE 37
*******************************TABLE PARTITION 25
*******************************TABLE SUBPARTITION 1714
*******************************TYPE 538
更多Oracle相关信息见Oracle 专题页面 ?tid=12

この記事では、DockerのMySQLメモリ使用量を最適化することを調査します。 監視手法(Docker統計、パフォーマンススキーマ、外部ツール)および構成戦略について説明します。 これらには、Dockerメモリの制限、スワッピング、およびcgroupsが含まれます

この記事では、MySQLの「共有ライブラリを開くことができない」エラーについて説明します。 この問題は、必要な共有ライブラリ(.so/.dllファイル)を見つけることができないMySQLの障害に起因しています。ソリューションには、システムのパッケージMを介してライブラリのインストールを確認することが含まれます。

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

この記事では、PHPMyAdminの有無にかかわらず、LinuxにMySQLを直接インストールするのとPodmanコンテナを使用します。 それは、各方法のインストール手順を詳述し、孤立、携帯性、再現性におけるポッドマンの利点を強調しますが、

この記事では、自己完結型のサーバーレスリレーショナルデータベースであるSQLiteの包括的な概要を説明します。 SQLiteの利点(シンプルさ、移植性、使いやすさ)と短所(同時性の制限、スケーラビリティの課題)を詳しく説明しています。 c

このガイドは、HomeBrewを使用してMacOSに複数のMySQLバージョンをインストールおよび管理することを示しています。 Homebrewを使用して設置を分離し、紛争を防ぐことを強調しています。 この記事では、インストール、開始/停止サービス、および最高のPRAを詳述しています

記事では、証明書の生成と検証を含むMySQL用のSSL/TLS暗号化の構成について説明します。主な問題は、セルフ署名証明書のセキュリティへの影響を使用することです。[文字カウント:159]

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
