[20181124]关于降序索引问题2.txt
[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的更多相关文章
- [20181124]关于降序索引问题3.txt
[20181124]关于降序索引问题3.txt --//链接:blog.itpub.net/267265/viewspace-2221425/,探讨降序索引中索引的键值.--//实际上使用函数sys_ ...
- [20190910]关于降序索引问题5.txt
[20190910]关于降序索引问题5.txt --//测试了索引TERM使用0xfe表示,回想到以前遇到降序索引的特殊字符编码问题,现在可是忘得一干二净.--//现在想想当时自己怎么猜测出来的,^_ ...
- [20191218]降序索引疑问4.txt
[20191218]降序索引疑问4.txt --//前几天优化一个项目,我发现许多表里面有有隐含字段,一般开发很少建立函数索引.我自己检查发现里面存在大量的降序索引.--//我感觉有点奇怪,为什么开发 ...
- MySQL 8 新特性之降序索引
MySQL 8.0终于支持降序索引了.其实,从语法上,MySQL 4就支持了,但正如官方文档所言,"they are parsed but ignored",实际创建的还是升序索引 ...
- MySQL8新增降序索引
MySQL8新增降序索引 桃花坞里桃花庵,桃花庵里桃花仙.桃花仙人种桃树,又摘桃花卖酒钱. 一.MySQL5.7 降序索引 MySQL在语法上很早就已经支持降序索引,但实际上创建的却仍然是升序索引,如 ...
- 谈谈MySQL中的降序索引 order by id DESC / ASC
今天这篇主要讲order by 语句中的多个字段asc desc的问题.mysql5中,索引存储的排序方式是ASC的,没有DESC的索引.现在能够理解为啥order by 默认是按照ASC来排序的了吧 ...
- Shell练习 统计单词个数,降序排列
原文:https://leetcode.com/problems/word-frequency/ Write a bash script to calculate the frequency of e ...
- 选取两个有序数组中最大的K个值,降序存入另一个数组中
原题: 假设有两个有序的整型数组int *a1, int *a2,长度分别为m和n.试用C语言写出一个函数选取两个数组中最大的K个值(K可能大于m+n)写到int *a3中,保持a3降序,并返回a3实 ...
- 算法导论--装备线调度(升序&&降序输出)
题意就先不用讲了吧,感觉自己还没有掌握核心的东西. //心得 //如何保持路径,递归的实现 #include<iostream> #include<cstdio> #inclu ...
随机推荐
- 在微信小程序中使用图表
前言:网上有许多的图表库,如:Echarts.Tau Charts.ChartJS等等,具体自行百度. 这次我们使用的是:Echarts 官方教程:点击查看 Echarts下载地址:飞机直达 1.下载 ...
- Xpath 获取html文档的标签
1.html page content: <div class="mnr-c _yE"> <div class="_kk _wI">In ...
- 各个系统下ping IP+端口的方法
前言 做开发的人员,可能都会遇到网络的一些问题.这时一般都需要测试指定的网络是否能正常访问.通常在windows系统下,在cmd里直接用命令ping指定的IP或者域名就可以快速的知道这个地址是否是可以 ...
- 如何像Python高手(Pythonista)一样编程
最近在网上看到一篇介绍Pythonic编程的文章:Code Like a Pythonista: Idiomatic Python,其实作者在2006的PyCon会议后就写了这篇文章,写这篇文章的主要 ...
- Canal 源码走读
前言 canal 是什么? 引用一下官方回答: 阿里巴巴mysql数据库binlog的增量订阅&消费组件 canal 能做什么? 基于日志增量订阅&消费支持的业务: 数据库镜像 数据库 ...
- Go基础系列:简单数据类型
每一个变量都有数据类型,Go中的数据类型有: 简单数据类型:int.float.complex.bool和string 数据结构或组合(composite):struct.array.slice.ma ...
- Go基础系列:为select设置超时时间
Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 After() 谁也无法保证某 ...
- oracle9i的erp数据库无法正常关闭的解决方法。
oracle9i版本的ERP数据库无法正常关闭. 场景描述:oracle9i数据库正常关闭的时候,hang住在一个地方无法正常关闭. 解决思路:查看alert日志,分析问题. [oraprod@erp ...
- 基于 LWIP 建立 TCP Server 与主机通信实验
LWIP 版本:2.0.3 上一篇文章是写如何将 LWIP 移植到板子上,今天晚上记录基于 LWIP 实现与主机的网络通信. 先是打开了原子的实验例程,大概浏览了一遍,觉得 TCP 网络网络通信也就是 ...
- C# 反射Reflection Assembly
反射反射程序员的快乐 一:什么叫反射 反射:是.net framework提供的一个访问metadata的帮助类,可以获取信息并且使用 反射的优点:动态 反射的缺点:1:稍微麻烦 2:能避开编译器的 ...