[20181124]关于降序索引问题2.txt

--//链接:blog.itpub.net/267265/viewspace-2221425/,探讨降序索引中索引的键值。
--//实际上使用函数sys_op_descend.
--//前面已经提到结尾加入FF,为了排序的需要。这样导致chr(0),以及后续的chr(1)字符出现问题。
--//一些细节继续探究:

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING          VERSION    BANNER                                                                       CON_ID
-------------------- ---------- ---------------------------------------------------------------------------- ------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production      0

2.测试:
SCOTT@test01p> WITH x0
  2       AS (SELECT '00' a, CHR (0) b FROM DUAL
  3           UNION ALL
  4           SELECT '01', CHR (1) FROM DUAL)
  5  SELECT x1.a c10, sys_op_descend (x1.b) c20
  6    FROM x0 x1;

C10        C20
---------- --------------------
00         FEFEFF
01         FEFAFF

SCOTT@test01p> WITH x0
  2       AS (SELECT '00' a, CHR (0) b FROM DUAL
  3           UNION ALL
  4           SELECT '01', CHR (1) FROM DUAL)
  5  SELECT x1.a || x2.a c10, sys_op_descend (x1.b || x2.b) c20
  6    FROM x0 x1, x0 x2;
C10        C20
---------- --------------------
0000       FEFDFF
0001       FEFCFF
0100       FEF9FF
0101       FEF8FF

--//注意以上编码。继续测试:

WITH x0
     AS (SELECT '00' a, CHR (0) b FROM DUAL
         UNION ALL
         SELECT '01', CHR (1) FROM DUAL
         union all
         SELECT '02', CHR (2) FROM DUAL
         )
SELECT x1.a || x2.a c10, sys_op_descend (x1.b || x2.b) c20
  FROM x0 x1, x0 x2;

C10        C20
---------- --------------------
0000       FEFDFF
0001       FEFCFF
0002       FEFBFDFF
0100       FEF9FF
0101       FEF8FF
0102       FEF7FDFF
0200       FDFEFEFF
0201       FDFEFAFF
0202       FDFDFF
9 rows selected.

--//不看结尾的ff。可以看出编码的规律
--//字符串0x00,0x0000,0x0001,0x00NN(0xNN>=0x02),0x01,0x0100,0x0101,0x01NN(0xNN>=0x02) 单独编码。画一个表格:

ascii码                 编码
---------------------------------------------
0x00                    FEFE
0x0000                  FEFD
0x0001                  FEFC
0x00NN(0xNN>=0x02)      FEFB
0x01                    FEFA
0x0100                  FEF9
0x0101                  FEF8        
0x01NN(0xNN>=0x02)      FEF7
---------------------------------------------

--//看一个复杂一点的例子:

WITH x0
     AS (SELECT '00' a, CHR (0) b FROM DUAL
         UNION ALL
         SELECT '01', CHR (1) FROM DUAL
         UNION ALL
         SELECT '02', CHR (2) FROM DUAL)
SELECT x1.a || x2.a || x3.a c10
      ,sys_op_descend (x1.b || x2.b || x3.b) c20
      ,TO_CHAR (ASCII ('z'), 'FMXX') || x1.a || x2.a || x3.a c10
      ,sys_op_descend ('z' || x1.b || x2.b || x3.b) c20
  FROM x0 x1, x0 x2, x0 x3;

C10        C20                  C10        C20
---------- -------------------- ---------- --------------------
000000     FEFDFEFEFF           7A000000   85FEFDFEFEFF
000001     FEFDFEFAFF           7A000001   85FEFDFEFAFF
000002     FEFDFDFF             7A000002   85FEFDFDFF
000100     FEFCFEFEFF           7A000100   85FEFCFEFEFF
000101     FEFCFEFAFF           7A000101   85FEFCFEFAFF
000102     FEFCFDFF             7A000102   85FEFCFDFF
000200     FEFBFDFEFEFF         7A000200   85FEFBFDFEFEFF
000201     FEFBFDFEFAFF         7A000201   85FEFBFDFEFAFF
000202     FEFBFDFDFF           7A000202   85FEFBFDFDFF
010000     FEF9FEFEFF           7A010000   85FEF9FEFEFF
010001     FEF9FEFAFF           7A010001   85FEF9FEFAFF
010002     FEF9FDFF             7A010002   85FEF9FDFF
010100     FEF8FEFEFF           7A010100   85FEF8FEFEFF
010101     FEF8FEFAFF           7A010101   85FEF8FEFAFF
010102     FEF8FDFF             7A010102   85FEF8FDFF
010200     FEF7FDFEFEFF         7A010200   85FEF7FDFEFEFF
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
010201     FEF7FDFEFAFF         7A010201   85FEF7FDFEFAFF
010202     FEF7FDFDFF           7A010202   85FEF7FDFDFF
020000     FDFEFDFF             7A020000   85FDFEFDFF
020001     FDFEFCFF             7A020001   85FDFEFCFF
020002     FDFEFBFDFF           7A020002   85FDFEFBFDFF
020100     FDFEF9FF             7A020100   85FDFEF9FF
020101     FDFEF8FF             7A020101   85FDFEF8FF
020102     FDFEF7FDFF           7A020102   85FDFEF7FDFF
020200     FDFDFEFEFF           7A020200   85FDFDFEFEFF
020201     FDFDFEFAFF           7A020201   85FDFDFEFAFF
020202     FDFDFDFF             7A020202   85FDFDFDFF
27 rows selected.

--//我仅仅分析下划线记录.遇到00,01需要上面的特殊编码。
--//010200,变成01,02,00 ,0102 对应的就是01NN,02编码,这样就是FEF7,FD.剩下的00 对应编码就是 FEFE。
--//这样010200 对应编码就是 FEF7 FD FEFE FF 。

--//7A010200,变成 7A,01,02,00 , 7A与FF异或= 85, 01对应编码要结合后面的02,
--//0102 对应的就是01NN,02编码,这样就是FEF7,FD.剩下的00 对应编码就是 FEFE。
--//这样7A010200 对应编码就是 85 FEF7 FD FEFE FF.

3.总结:
--//总之一点就是排序的需要,跳出1个坑(结尾加FF),又进入一个更深的坑chr(0),占用chr(1)的编码,又进入一个更深的坑。
--//结果出现这样特殊的编码,实际上也给一些开发提供一些借鉴,看看oracle技术人员如何实现这些,虽然不知道该如何
--//写这些代码。

--//如果应用程序就不会考虑这样的情况,但是对于oracle这样的数据库软件,必须注意这些细节,导致编码发热复杂性.
--//我自己花了一个晚上,才从中总结出规律,又有点钻牛角尖了。^_^。

[20181124]关于降序索引问题2.txt的更多相关文章

  1. [20181124]关于降序索引问题3.txt

    [20181124]关于降序索引问题3.txt --//链接:blog.itpub.net/267265/viewspace-2221425/,探讨降序索引中索引的键值.--//实际上使用函数sys_ ...

  2. [20190910]关于降序索引问题5.txt

    [20190910]关于降序索引问题5.txt --//测试了索引TERM使用0xfe表示,回想到以前遇到降序索引的特殊字符编码问题,现在可是忘得一干二净.--//现在想想当时自己怎么猜测出来的,^_ ...

  3. [20191218]降序索引疑问4.txt

    [20191218]降序索引疑问4.txt --//前几天优化一个项目,我发现许多表里面有有隐含字段,一般开发很少建立函数索引.我自己检查发现里面存在大量的降序索引.--//我感觉有点奇怪,为什么开发 ...

  4. MySQL 8 新特性之降序索引

    MySQL 8.0终于支持降序索引了.其实,从语法上,MySQL 4就支持了,但正如官方文档所言,"they are parsed but ignored",实际创建的还是升序索引 ...

  5. MySQL8新增降序索引

    MySQL8新增降序索引 桃花坞里桃花庵,桃花庵里桃花仙.桃花仙人种桃树,又摘桃花卖酒钱. 一.MySQL5.7 降序索引 MySQL在语法上很早就已经支持降序索引,但实际上创建的却仍然是升序索引,如 ...

  6. 谈谈MySQL中的降序索引 order by id DESC / ASC

    今天这篇主要讲order by 语句中的多个字段asc desc的问题.mysql5中,索引存储的排序方式是ASC的,没有DESC的索引.现在能够理解为啥order by 默认是按照ASC来排序的了吧 ...

  7. Shell练习 统计单词个数,降序排列

    原文:https://leetcode.com/problems/word-frequency/ Write a bash script to calculate the frequency of e ...

  8. 选取两个有序数组中最大的K个值,降序存入另一个数组中

    原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...

  9. 算法导论--装备线调度(升序&&降序输出)

    题意就先不用讲了吧,感觉自己还没有掌握核心的东西. //心得 //如何保持路径,递归的实现 #include<iostream> #include<cstdio> #inclu ...

随机推荐

  1. Java IO API记录

    文件路径: public static final String FILEPATH= File.separator+"Users"+ File.separator+"xu ...

  2. [NewLife.XCode]数据模型文件

    NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含 ...

  3. Core2.0知识整理

    概述 Commond-Line ASP.NET结构文件 Startup 配置文件 中间件和依赖注入 依赖注入原理 框架自带的依赖注入(IServiceCollection) 依赖注入生命周期 依赖注入 ...

  4. 走进javascript——重拾数组

    Array构造器 如果参数只有一个并且是Number类型,那么就是指定数组的长度,但不能是NaN,如果是多个会被当做参数列表. new Array(12) // (12) [undefined × 1 ...

  5. MFC原理第五讲.消息映射.以及如何添加消息

    MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...

  6. NiftyNet项目介绍

    NiftyNet项目介绍  简述  NiftyNet是一款开源的卷积神经网络平台,旨在通过实现医学图像分析的深度学习方法和模块,支持快速原型和再现性,由WEISS (Wellcome EPSRC Ce ...

  7. Hibernate学习(六)———— cascade(级联)和inverse关系详解

    序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...

  8. 机器学习排序算法:RankNet to LambdaRank to LambdaMART

    使用机器学习排序算法LambdaMART有一段时间了,但一直没有真正弄清楚算法中的所有细节. 学习过程中细读了两篇不错的博文,推荐给大家: 梯度提升树(GBDT)原理小结 徐博From RankNet ...

  9. javascript小实例,在页面中输出当前客户端时间

    时间对象(Date())比较简单,本文旨在为初学者入门使用,大牛可略过! 本文承接基础知识实例,说一下实例的要求: 在页面中输出当前客户端时间(2015年1月1日星期一10:10:10这样的格式),每 ...

  10. Winform系列——好用的DataGridview过滤控件(表格的高级搜索功能)

    上一篇 Winform系列——好看的DataGridView折叠控件 中主要介绍了DataGridview的表格多级折叠功能.这章主要介绍下最近封装的另一个DataGridview表格高级过滤的功能. ...