理解v$sql的exact_matching_signature与force_matching_signature

对SQL语句,去掉重复的空格(不包括字符常量),将大小写转换成相同,比如均为大写(不包括字符常量)后,如果SQL相同,那么SQL语句的exact_matching_signature就是相同的。

对SQL语句,去掉重复的空格(不包括字符常量),将大小写转换成相同,比如均为大写(不包括字符常量),然后去掉SQL中的常量,如果SQL相同,那么SQL语句的force_matching_signature就是相同的。
 
但是例外的情况是:如果SQL中有绑定变量,force_matching_signature就会与exact_matching_signature一样的生成标准。
select /*+ findme */ name from t01 where id=;
select /*+ findme1 */ name from t01 where id=;
select /*+ findme */ Name from t01 where id=;
SELECT /*+ findme */ nAme FROM t01 WHERE id=;
SELECT /*+ Findme */ nAme FROM t01 WHERE id=;
SELECT /*+ Findme test */ nAme FROM t01 WHERE id=;
SELECT /*+ full(t01) Findme */ nAme FROM t01 WHERE id=;
SELECT /*+ index(t01) Findme */ nAme FROM t01 WHERE id=; SQL> create table t01(id number,name varchar2());
SQL> insert into t01 values(,'bb01');
SQL> insert into t01 values(,'bb02');
SQL> insert into t01 values(,'bb03');
SQL> insert into t01 values(,'bb04');
SQL> insert into t01 values(,'bb05'); SQL> select /*+ findme */ name from t01 where id=;
SQL> select /*+ findme1 */ name from t01 where id=;
SQL> select /*+ findme */ Name from t01 where id=;
SQL> SELECT /*+ findme */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ Findme */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ Findme test */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ full(t01) Findme */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ index(t01) Findme */ nAme FROM t01 WHERE id=;
SQL> select sql_text,force_matching_signature,exact_matching_signature from v$sql where lower(sql_text) like '%/*%findme%' and sql_text not like '%v$sql%';
SQL_TEXT FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
-------------------------------------------------------------------------------- ------------------------ ------------------------
select /*+ findme */ Name from t01 where id= 2.61638783165569E18 1.81667648323122E19
select /*+ findme1 */ name from t01 where id= 1.48618482593165E19 3.84294405114677E18
select /*+ findme */ name from t01 where id= 2.61638783165569E18 1.81667648323122E19
SELECT /*+ index(t01) Findme */ nAme FROM t01 WHERE id= 8.64347201076369E18 1.06927716956949E19
SELECT /*+ full(t01) Findme */ nAme FROM t01 WHERE id= 3.77473736948433E18 2.01226189844612E18
SELECT /*+ Findme */ nAme FROM t01 WHERE id= 2.61638783165569E18 1.81667648323122E19
SELECT /*+ findme */ nAme FROM t01 WHERE id= 2.61638783165569E18 1.81667648323122E19
SELECT /*+ Findme test */ nAme FROM t01 WHERE id= 1.31270739882141E19 1.18833249442956E19
rows selected SQL> alter session set cursor_sharing=force;
SQL> alter system flush shared_pool;
SQL> select /*+ findme */ name from t01 where id=;
SQL> select /*+ findme1 */ name from t01 where id=;
SQL> select /*+ findme */ Name from t01 where id=;
SQL> SELECT /*+ findme */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ Findme */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ Findme test */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ full(t01) Findme */ nAme FROM t01 WHERE id=;
SQL> SELECT /*+ index(t01) Findme */ nAme FROM t01 WHERE id=;
SQL> select sql_text,force_matching_signature,exact_matching_signature from v$sql where lower(sql_text) like '%/*%findme%' and sql_text not like '%v$sql%';
SQL_TEXT FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
-------------------------------------------------------------------------------- ------------------------ ------------------------
select /*+ findme1 */ name from t01 where id=:"SYS_B_0" 1.48618482593165E19 1.48618482593165E19
select /*+ findme */ Name from t01 where id=:"SYS_B_0" 2.61638783165569E18 2.61638783165569E18
select /*+ findme */ name from t01 where id=:"SYS_B_0" 2.61638783165569E18 2.61638783165569E18
SELECT /*+ index(t01) Findme */ nAme FROM t01 WHERE id=:"SYS_B_0" 8.64347201076369E18 8.64347201076369E18
SELECT /*+ Findme test */ nAme FROM t01 WHERE id=:"SYS_B_0" 1.31270739882141E19 1.31270739882141E19
SELECT /*+ Findme */ nAme FROM t01 WHERE id=:"SYS_B_0" 2.61638783165569E18 2.61638783165569E18
SELECT /*+ full(t01) Findme */ nAme FROM t01 WHERE id=:"SYS_B_0" 3.77473736948433E18 3.77473736948433E18
SELECT /*+ findme */ nAme FROM t01 WHERE id=:"SYS_B_0" 2.61638783165569E18 2.61638783165569E18
rows selected SQL>

理解v$sql的exact_matching_signature与force_matching_signature的更多相关文章

  1. 以初学者的角度理解:SQL实现关系除法

    以初学者的角度理解:SQL实现关系除法 相信各位在学习SQL的时候,由于没有一家SQL语言提供除法命令而只能自己写一个.而网上大多就是四步骤加一个模板: select distinct A.X fro ...

  2. SQL Server-聚焦深入理解动态SQL查询(三十二)

    前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...

  3. Flask关于请求表单的粗浅应用及理解+简单SQL语句温习

    1.请求表单 请求表单的知识点是flask数据请求中很小的一部分,首先要了解一下GET和POST请求:http://www.w3school.com.cn/tags/html_ref_httpmeth ...

  4. 快速理解 Phoenix : SQL on HBASE

    转自:http://blog.csdn.net/colorant/article/details/8645081 ==是什么 == 目标Scope EasyStandard SQL access on ...

  5. 0708关于理解mysql SQL执行顺序

    转自 http://www.jellythink.com/archives/924,博客比价清晰 我理解上文的是SQL执行顺序 总体方案.当你加入索引了以后,其实他的执行计划是有细微的变化,比方说刚开 ...

  6. mysql中难以理解的sql

    工作中遇到这样的例子, CASE type WHEN 1 THEN '普通红包' WHEN 2 THEN '普通礼包加油卡' WHEN 3 THEN '优 惠码兑换加油卡' WHEN 4 THEN ' ...

  7. 理解Spark SQL(一)—— CLI和ThriftServer

    Spark SQL主要提供了两个工具来访问hive中的数据,即CLI和ThriftServer.前提是需要Spark支持Hive,即编译Spark时需要带上hive和hive-thriftserver ...

  8. 理解Spark SQL(二)—— SQLContext和HiveContext

    使用Spark SQL,除了使用之前介绍的方法,实际上还可以使用SQLContext或者HiveContext通过编程的方式实现.前者支持SQL语法解析器(SQL-92语法),后者支持SQL语法解析器 ...

  9. 理解Spark SQL(三)—— Spark SQL程序举例

    上一篇说到,在Spark 2.x当中,实际上SQLContext和HiveContext是过时的,相反是采用SparkSession对象的sql函数来操作SQL语句的.使用这个函数执行SQL语句前需要 ...

随机推荐

  1. Rails--bundle exec rake db:migrate

    --新建表: def up create_table :[TABLE_NAME] do |t| t.column :[NUM], :integer t.column :[NAME], :string ...

  2. 初步理解Java的三大特性——封装、继承和多态

    声明:整理自网络,如有雷同,请联系博主处理 一.封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被 ...

  3. Java笔试面试题二(常考问答)转

    1.说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允 ...

  4. 利用js轻松实现页面简繁体转换

    使用方法:StranBody(); //转换对象,使用递归,逐层剥到文本 function StranBody(fobj) { if(typeof(fobj)=="object") ...

  5. what a fuck postgre update sql

    ================= what a fuck postgre update sql ================= UPDATE temp_group_temp set group_ ...

  6. Java中instanceof用法

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...

  7. Mysql 只导出数据,不包含表结构

    mysqldump -u${user} -p${passwd} --no-create-info --database ${dbname} --table ${tablename} > ${ta ...

  8. POI简易帮助文档系列--给Excel设置样式

    正如Html需要CSS一样,我们的POI生成的Excel同样需要样式才能更完美的表现我们的数据.下面还是从简单的例子出发,学习和了解POI的样式设计. 一.我的位置. package com.myja ...

  9. 20145211《Java程序设计》第5周学习总结——独上高楼,望尽天涯路

    教材学习内容总结 异常处理 JAVA异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.异常就是出现在运行时出现不正常 ...

  10. 基于 backbone的弹窗插件

    define(['backbone', 'jquery', 'text!creditCardTpl/page.html'], function (bacobone, jquery, dialog_tp ...