Tag Archives: sql

利用分析函数改写范围判断自关联查询

最近碰到一个单条SQL运行效率不佳导致数据库整体运行负载较高的问题。 分析、定位数据库的主要负载是这条语句引起的过程相对简单,通过AWR报告就可以比较容易的完成定位,这里就不赘述了。 现在直接看一下这个导致性能问题的SQL语句,其对应的SQL REPORT统计如下: Stat Name Statement Total Per Execution % Snap Total Elapsed Time (ms) 363,741 363,740.78 8 .42 CPU Time (ms) 362,770 362,770.00 8 .81 Executions 1     Buffer Gets 756 756.00 0.00 Disk Reads 0 0.00 … Continue reading

Posted in ORACLE | Tagged , | Leave a comment

SQL解决刑侦推理问题

前些天看到一个朋友在朋友圈里面贴了个图,上面是2018年刑侦科推理试题,看了一下题目,这些题目都是彼此依赖,很难找到一个题目作为入手点可以进一步分析,因此可能需要用纸笔配合大量的假设和试错才能继续完成。 原题如下:     不过这种问题其实是SQL擅长的领域,于是一时手痒,写了一个SQL语句: SQL> WITH T AS   2  (SELECT ASCII(‘A’) R FROM DUAL   3  UNION ALL   4  SELECT ASCII(‘B’) FROM DUAL   5  UNION ALL   6  SELECT ASCII(‘C’) FROM DUAL   7  UNION ALL   … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment

ITPUB SQL大赛第四期

SQL大赛第四期解法的最终答案。 第四期题目参考:http://www.itpub.net/thread-1411495-1-1.html版主newkid点评参考:http://www.itpub.net/thread-1417576-1-1.html 最近整理BLOG文章时发现,这篇文章当时没有贴出来。由于当时发现最后一题出现了错误,且手头的事情比较多,本打算搞清楚之后再把结果贴出来,没想到后来忘记了。虽然已经过去了一年了,不过信守自己的承诺,还是把最终结果贴出来。 我的代码为: WITH DAY AS ( SELECT TO_DATE(:P_START_DATE, ‘YYYYMMDD’) + ROWNUM – 1 DAY FROM DUAL CONNECT BY ROWNUM <= TO_DATE(:P_END_DATE, ‘YYYYMMDD’) – TO_DATE(:P_START_DATE, ‘YYYYMMDD’) + 1 ), COMPANY_INFO AS ( SELECT A.USER_ID, SERVICE_ID, B.COMPANY_ID, GREATEST(START_DATE, TO_DATE(:P_START_DATE, ‘YYYYMMDD’)) … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment

SQLPLUS小技巧带行号PLSQL的粘贴

前两天写了一篇如何在SQLPLUS中粘贴SQL语句,但是改方法对于SQL有效,对于PL/SQL语句则存在一些小问题。 SQLPLUS小技巧带行号SQL的粘贴:https://yangtingkun.net/?p=1167 还是在sqlplus中粘贴带行号的问题,对于PL/SQL,之前给出的方法存在问题: SQL> DECLARE 2 V_NUM NUMBER; 3 BEGIN 4 FOR I IN 1..10000 LOOP 5 NULL; 6 END LOOP; 7 END; 8 / PL/SQL PROCEDURE successfully completed. SQL> DECLARE 2 . SQL> 2 V_NUM NUMBER; SQL> 3 BEGIN … Continue reading

Posted in ORACLE | Tagged , , , , , | Leave a comment

SQLPLUS小技巧带行号SQL的粘贴

介绍一个SQLPLUS中粘贴SQL语句的小技巧。 除了Windows环境下的SQLPLUSW之外,当在sqlplus中运行了一个很长的语句后,得到的是一个带有行号的SQL: SQL> SELECT ksppinm name, 2 ksppstvl VALUE, 3 ksppdesc des 4 FROM x$ksppi x, x$ksppcv y 5 WHERE (x.indx = y.indx) 6 AND bitand(ksppiflg,268435456) = 0 7 AND ksppinm LIKE ‘max%size’; NAME VALUE DES —————— ————- ——————————- max_dump_file_size … Continue reading

Posted in ORACLE | Tagged , , , , | Leave a comment

将指定SQL的执行计划从共享池删除

如果Oracle的优化器产生了某种错误的执行计划,或者我们希望Oracle对于某个SQL重新进行分析,那么就需要这个SQL的执行计划在共享池中过期,而简单的方法在10.2.0.4以后才出现。 对于以前的版本而言,最显而易见的方法莫过于直接刷新共享池,但是如果是数据库中绝大部分的SQL都存在问题,那么这种方法无可厚非,也可能是见效最快的方法,而如果数据库中仅仅是个别的SQL存在问题,那么这种方法就过于暴力了。 SQL> SELECT COUNT(*) FROM dual; COUNT(*) ———- 1 SQL> SELECT sql_id, address, hash_value, executions, loads, parse_calls, invalidations 2 FROM v$sqlarea 3 WHERE sql_text = ‘select count(*) from dual’; SQL_ID ADDRESS HASH_VALUE EXECUTIONS LOADS PARSE_CALLS INVALIDATIONS ————- —————- ———- … Continue reading

Posted in ORACLE | Tagged , , , , , | 2 Comments