Oracle 是分区表,但条件不带分区条件的SQL
来源:互联网 发布:2016年淘宝双11抢红包 编辑:程序博客网 时间:2024/06/15 19:32
Oracle 是分区表,但条件不带分区条件的SQL(筛选条件:当天,查询超过1s,某些SQL类型)
/*
查找是分区表,但条件不带分区的SQL
COMMAND_TYPE:
查找的视图:V$SQLCOMMAND
2:INSERT
3:SELECT
6:UPDATE
7:DELETE
189:MERGE
注释:
先通过SQL执行计划视图中查询OPERATION||' '||OPTIONS=TABLE ACCESS FULL 对应ID上一层是PARTITION RANGE ALL
的SQL_ID,再查找详细的SQL语句(+筛选条件)
*/
SELECT S.SQL_TEXT,
S.SQL_FULLTEXT,
S.SQL_ID,
ROUND (ELAPSED_TIME / 1000000 / ( CASE
WHEN (EXECUTIONS = 0 OR NVL (EXECUTIONS, 1 ) = 1) THEN
1
ELSE
EXECUTIONS
END ),
2 ) "执行时间'S'",
P1.OBJECT_OWNER,
P1.OBJECT_NAME,
P1.OPERATION,
S.LAST_LOAD_TIME,
--P1.P_PLAN_HASH_VALUE,
S.PLAN_HASH_VALUE
FROM V$SQLAREA S
JOIN ( SELECT DISTINCT /*去重是因为 1SQL多次调用,执行计划一样 不去重会出现多值 最终SQL会出现多个*/
A.SQL_ID,
A.OBJECT_OWNER,
A.OBJECT_NAME,
P.OPERATION
FROM (SELECT P.SQL_ID,
P.OBJECT_OWNER,
P.OBJECT_NAME,
P.PLAN_HASH_VALUE,
P.OPERATION || ' ' || P.OPTIONS "OPERATION",
P.ID, --不带ID 若一个SQL 2个分区表且2个分区表都没有加分区条件 会产生笛卡尔集
P.HASH_VALUE,
P.PLAN_HASH_VALUE P_PLAN_HASH_VALUE
FROM V$SQL_PLAN P
WHERE P.OPERATION || ' ' || P.OPTIONS =
'PARTITION RANGE ALL' ) P --查找执行计划是‘PARTITION RANGE ALL’ 分区全扫 ,而不是‘PARTITION RANGE SINGLE’部分分区扫描
JOIN (SELECT SQL_ID,
P.OBJECT_OWNER,
P.OBJECT_NAME,
P.PLAN_HASH_VALUE,
P.OPERATION || ' ' || P.OPTIONS,
P.ID - 1 ID , --执行计划 显示‘PARTITION RANGE ALL’在‘TABLE ACCESS FULL’ 下一行 也就是id-1和分区全扫的id,全部关联后才能过滤出真正的表
P.HASH_VALUE
FROM V$SQL_PLAN P
WHERE (P.OBJECT_NAME IN
( SELECT PT.TABLE_NAME FROM USER_PART_TABLES PT))
AND P.OPERATION || ' ' || P.OPTIONS = 'TABLE ACCESS FULL' --查找执行计划是‘TABLE ACCESS FULL’ 表全扫...
AND P.OBJECT_OWNER = '&USERNAME'
AND TO_CHAR(P.TIMESTAMP, 'YYYY-MM-DD' ) =
TO_CHAR( SYSDATE , 'YYYY-MM-DD' )) A
ON P.SQL_ID = A.SQL_ID
AND P.ID = A.ID --2个关联条件最终得出 是分区表但没带分区条件的表/sql_id...等
) P1
ON S.SQL_ID = P1.SQL_ID
WHERE ROUND (ELAPSED_TIME / 1000000 / ( CASE
WHEN (EXECUTIONS = 0 OR NVL (EXECUTIONS, 1 ) = 1) THEN
1
ELSE
EXECUTIONS
END ),
2 ) > 1 --100 0000微秒=1S
AND S.PARSING_SCHEMA_NAME = '&USERNAME'
AND TO_CHAR(S.LAST_LOAD_TIME, 'YYYY-DD-MM' ) =
TO_CHAR( SYSDATE , 'YYYY-DD-MM' )
AND S.COMMAND_TYPE IN (2 , 3, 5 , 6 , 189)
ORDER BY S.ELAPSED_TIME DESC ;
祝好~
祝好~
0 0
- Oracle 是分区表,但条件不带分区条件的SQL
- 分区表查询带分区条件,没有分区消除
- SQL-带条件的查询
- 如何优化带or条件的sql
- SQL带条件的AVG函数应用
- SQL Server 查询条件是中文查不出来
- SQL Server 查询条件是中文查不出来
- Oracle 的sql语句多条件判断
- Hibernate实现不带条件的简单分页查询
- oracle分区 前台查询条件样式
- hive sql分区和条件优化
- 几个SQL语句。截取带条件的字符串
- sql sever 创建带条件的唯一性索引
- 一对多带限制条件的SQL语句
- Oracle SQL 条件查询语句
- SQL ORACLE 查询 日期条件
- sql的条件子句
- sql的查询条件
- 顺序表应用2:多余元素删除之建表算法
- android.view.InflateException: Binary XML file line #异常的解决
- NSArray数组的常用操作(遍历、排序、比较、与字符串的比较)
- Leetcode 206. Reverse Linked List
- 使用session技术实现购物车的功能
- Oracle 是分区表,但条件不带分区条件的SQL
- Android——Matrix变换矩阵的探索(2)
- android开发笔记之多媒体—画画板(娱乐一下)
- mac 安装Android studio遇到的问题及解决
- 顺序表应用3:元素位置互换之移位算法
- 学习HTML与CSS
- ios 开发学习日志 自定义alertView 2
- Android源代码分析要看的书
- MySQL更新用户密码