[20180926]查询相似索引.txt
[20180926]查询相似索引.txt
--//有时候在表上建立索引比如A,B字段,可能又建立B字段索引,甚至A字段索引以及B,A字段索引,或者还建立C,A字段索引,
--//需要有1个脚本查询这些索引,可能还有必要删除一些索引,统一协调建立合适的索引.
--//优化需要,做一个记录.
1.环境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
2.建立测试例子:
SCOTT@test01p> create table t (a number,b number,c number);
Table created.
SCOTT@test01p> create index i_t_a_b on t(a,b);
Index created.
SCOTT@test01p> create index i_t_c_b on t(c,b);
Index created.
--//网上找到的例子:
SELECT TABLE_OWNER, TABLE_NAME, INDEX_NAME, COLUMN_NAME
FROM ALL_IND_COLUMNS
WHERE COLUMN_POSITION = 1
AND TABLE_OWNER = UPPER ('&&1')
AND (TABLE_OWNER, TABLE_NAME, COLUMN_NAME) IN (
SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME
FROM (
SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME, COUNT (*) TCOUNT
FROM ALL_IND_COLUMNS
WHERE TABLE_OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP')
HAVING COUNT (*) > 1
GROUP BY TABLE_OWNER, TABLE_NAME, COLUMN_NAME))
ORDER BY TABLE_OWNER, TABLE_NAME, COLUMN_NAME, INDEX_NAME;
--//实际上这个例子在我们生产系统根本无法执行,表N多,1个小时都没有查询出来.而且像上面建立的索引是无法找到的.
--//因为它仅仅针对COLUMN_POSITION = 1的情况.
--//使用with改写如下:
/* Formatted on 2018/9/25 22:19:20 (QP5 v5.227.12220.39754) */
WITH t1
AS (SELECT TABLE_OWNER
,TABLE_NAME
,INDEX_NAME
,COLUMN_NAME
,COLUMN_POSITION
FROM ALL_IND_COLUMNS
WHERE TABLE_OWNER = UPPER ('&&1'))
,t2
AS ( SELECT DISTINCT TABLE_OWNER
,TABLE_NAME
,INDEX_NAME
,COLUMN_NAME
FROM t1
WHERE (TABLE_OWNER, TABLE_NAME, COLUMN_NAME) IN
(SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME
FROM ( SELECT TABLE_OWNER
,TABLE_NAME
,COLUMN_NAME
,COUNT (*) TCOUNT
FROM T1
HAVING COUNT (*) > 1
GROUP BY TABLE_OWNER, TABLE_NAME, COLUMN_NAME))
ORDER BY TABLE_OWNER
,TABLE_NAME
,COLUMN_NAME
,INDEX_NAME)
,t3
AS ( SELECT TABLE_OWNER
,TABLE_NAME
,INDEX_NAME
,LISTAGG (column_name, ', ')
WITHIN GROUP (ORDER BY column_position)
AS column_group
FROM t1
GROUP BY TABLE_OWNER, TABLE_NAME, INDEX_NAME)
SELECT TABLE_OWNER
,TABLE_NAME
,INDEX_NAME
,column_group
FROM t3
WHERE (TABLE_OWNER, TABLE_NAME, INDEX_NAME) IN
(SELECT TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM t2);
TABLE_OWNER TABLE_NAME INDEX_NAME COLUMN_GROUP
-------------------- -------------------- -------------------- ----------------------
SCOTT T I_T_A_B A, B
SCOTT T I_T_C_B C, B
--//补充:在生产系统使用不到1秒就执行完成.
--//换一个参数OE.
Enter value for 1: OE
old 8: WHERE TABLE_OWNER = UPPER ('&&1'))
new 8: WHERE TABLE_OWNER = UPPER ('OE'))
TABLE_OWNER TABLE_NAME INDEX_NAME COLUMN_GROUP
-------------------- -------------------- -------------------- -------------------------------------------------
OE INVENTORIES INVENTORY_IX WAREHOUSE_ID, PRODUCT_ID
OE INVENTORIES INV_PRODUCT_IX PRODUCT_ID
OE ORDER_ITEMS ITEM_ORDER_IX ORDER_ID
OE ORDER_ITEMS ORDER_ITEMS_PK ORDER_ID, LINE_ITEM_ID
OE ORDER_ITEMS ORDER_ITEMS_UK ORDER_ID, PRODUCT_ID
OE ORDER_ITEMS ITEM_PRODUCT_IX PRODUCT_ID
6 rows selected.
--//如果使用网上的脚本结果如下:
SCOTT@test01p> SELECT TABLE_OWNER, TABLE_NAME, INDEX_NAME, COLUMN_NAME
2 FROM ALL_IND_COLUMNS
3 WHERE COLUMN_POSITION = 1
4 AND TABLE_OWNER = UPPER ('&&1')
5 AND (TABLE_OWNER, TABLE_NAME, COLUMN_NAME) IN (
6 SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME
7 FROM (
8 SELECT TABLE_OWNER, TABLE_NAME, COLUMN_NAME, COUNT (*) TCOUNT
9 FROM ALL_IND_COLUMNS
10 WHERE TABLE_OWNER NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP')
11 HAVING COUNT (*) > 1
12 GROUP BY TABLE_OWNER, TABLE_NAME, COLUMN_NAME))
13 ORDER BY TABLE_OWNER, TABLE_NAME, COLUMN_NAME, INDEX_NAME;
old 4: AND TABLE_OWNER = UPPER ('&&1')
new 4: AND TABLE_OWNER = UPPER ('OE')
TABLE_OWNER TABLE_NAME INDEX_NAME COLUMN_NAME
-------------------- -------------------- -------------------- --------------------
OE INVENTORIES INV_PRODUCT_IX PRODUCT_ID
OE ORDER_ITEMS ITEM_ORDER_IX ORDER_ID
OE ORDER_ITEMS ORDER_ITEMS_PK ORDER_ID
OE ORDER_ITEMS ORDER_ITEMS_UK ORDER_ID
OE ORDER_ITEMS ITEM_PRODUCT_IX PRODUCT_ID
--//1.结果不同,存在遗漏.
--//2.明显感觉执行很慢.
--//3.显示不直观.
[20180926]查询相似索引.txt的更多相关文章
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- [20190226]测试使用bbed恢复索引.txt
[20190226]测试使用bbed恢复索引.txt --//上午做tab$删除恢复测试时发现,tab$的索引i_tab1很小.可以尝试使用bbed解决这个问题.--//首先在普通表上做一个测试看看. ...
- oracle查询不走索引的一些情况(索引失效)
Oracle建立索引的目的是为了避免全表扫描,提高查询的效率. 但是有些情况下发现即使建立了索引,但是写出来的查询还是很慢,然后会发现是索引失效导致的,所以需要了解一下那些情况会导致索引失效,即查询不 ...
- Mongodb 笔记03 查询、索引
查询 1. MongoDB使用find来进行查询.find的第一个参数决定了要返回哪些文档,这个参数是一个文档,用于指定查询条件.空的查询会匹配集合的全部内容.要是不指定查询,默认是{}. 2. 可以 ...
- 为何在查询中索引未被使用 (Doc ID 1549181.1)
To Bottom * 为何在查询中索引未被使用 (Doc ID 1549181.1) To Bottom 文档内容 用途 排错步骤 高速检查 表上是否存在索引? 索引是否应该 ...
- MongoDB的第二天(更新,删除,查询,索引)
Mongodb的更新方式有三种 update函数,操作符更新,save函数 update: 语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选) ...
- mysql中的回表查询与索引覆盖
了解一下MySQL中的回表查询与索引覆盖. 回表查询 要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Sec ...
- elasticsearch查询篇索引映射文档数据准备
elasticsearch查询篇索引映射文档数据准备 我们后面要讲elasticsearch查询,先来准备下索引,映射以及文档: 我们先用Head插件建立索引film,然后建立映射 POST http ...
随机推荐
- Struts1入门实例(简单登录)
Struts1入门实例(简单登录) 现在开始加入公司的核心项目,但由于项目开发比较早,所以使用的技术不是很新潮,前台用的还是struts1. 虽然不是什么新技术,但仍可以从中学到好多东西的.花了一个晚 ...
- 微信小程序自定义navigationBar标题栏
小程序默认使用的navigationBar只能设置颜色.文字,左侧返回按钮也是不可改变的,若要实现下方效果有解决方案,但是也有一定的问题. 1.更改app.json "window" ...
- 【Python开发】Python中数据分析环境的搭建
注:无论是任何一门语言,刚开始入门的时候,语言运行环境的搭建都是一件不轻松的事情. Python的运行环境 要运行或写Python代码,就需要Python的运行环境,主要的Python有以下三类: 原 ...
- 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.
32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 标号1: 反汇编窗口 (显示代码的地址,二进制指令,汇编代码,注释) 标号2: 寄存器窗口( ...
- 【转】深入理解Android之View的绘制流程
概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...
- Go基础系列:channel入门
Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 channel基础 chann ...
- 举例分析 Makefile 中的 patsubst、wildcard、notdir 函数
函数简介: 1.wildcard : 扩展通配符 2.notdir :去除路径 3.patsubst :替换通配符 实例: 建立一个 test 目录,在测试目录下建立一个名为 sub 的子目录 $ m ...
- OpenCV入门之寻找图像的凸包(convex hull)
介绍 凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包. 在图像处理过程中,我们 ...
- Spring Boot入门(13)自制音乐平台
经过笔者这几天的辛勤劳作(其实就是苦逼地码代码),一个新的网站已经上线啦!该网站是用Spring Boot工具写的,主要实现的功能如下: 根据歌曲名称和音乐平台搜索歌曲,并实现歌曲的在线播放: 歌 ...
- yarn install npm install (转载)
解决 npm i 及 yarn install 都无法进行安装的问题和node-sass安装太慢的问题 2018年03月31日 19:49:07 Johnny丶me 阅读数:2906更多 所属专栏: ...