查询慢的SQL:

  1. with p as(
  2. select np.nodecode , np.nodename, d.deviceid, d.devicename, d.loopaddress, p.respara, p.rxcrcerror, p.txcrcerror
  3. from perf_t_ponport p,device d, node c,node np
  4. where p.resid = d.deviceid
  5. and d.nodecode = c.nodecode
  6. and c.citynodecode = np.nodecode
  7. and c.nodecode in (SELECT S.NODECODE FROM SINGLEUSERNODEAUTH S WHERE S.NETUSERID = 'admin' AND S.AUTHTYPE = 'VIEW')
  8. and d.changetype = 0
  9. and p.coltime between trunc(sysdate-1,'dd') and trunc(sysdate,'dd')
  10. and p.rxcrcerror is not null
  11. and p.rxcrcerror >0
  12. order by p.rxcrcerror desc
  13. )
  14. select *
  15. from p
  16. where rownum <=10
这个SQL执行花费了1分钟24秒,需要优化。


查看执行计划:
  1. SQL> explain plan for with p as(
  2. 2 select np.nodecode , np.nodename, d.deviceid, d.devicename, d.loopaddress, p.respara, p.rx
  3. crcerror, p.txcrcerror
  4. 3 from perf_t_ponport p,device d, node c,node np
  5. 4 where p.resid = d.deviceid
  6. 5 and d.nodecode = c.nodecode
  7. 6 and c.citynodecode = np.nodecode
  8. 7 and c.nodecode in (SELECT S.NODECODE FROM SINGLEUSERNODEAUTH S WHERE S.NETUSERID = 'adm
  9. in' AND S.AUTHTYPE = 'VIEW')
  10. 8 and d.changetype = 0
  11. 9 and p.coltime between trunc(sysdate-1,'dd') and trunc(sysdate,'dd')
  12. 10 and p.rxcrcerror is not null
  13. 11 and p.rxcrcerror >0
  14. 12 order by p.rxcrcerror desc
  15. 13 )
  16. 14 select *
  17. 15 from p
  18. 16 where rownum <=10
  19. 17 ;
  20. 已解释。
  21. SQL> select * from table(dbms_xplan.display);
  22. PLAN_TABLE_OUTPUT
  23. ----------------------------------------------------------------------------------------------------
  24. Plan hash value: 733587010
  25. ----------------------------------------------------------------------------------------------------
  26. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  27. ----------------------------------------------------------------------------------------------------
  28. | 0 | SELECT STATEMENT | | 10 | 3430 | 1125K (19)| 03:45:09 | | |
  29. |* 1 | COUNT STOPKEY | | | | | | | |
  30. | 2 | VIEW | | 133 | 45619 | 1125K (19)| 03:45:09 | | |
  31. |* 3 | SORT ORDER BY STOPKEY | | 133 | 22743 | 1125K (19)| 03:45:09 | | |
  32. |* 4 | FILTER | | | | | | | |
  33. |* 5 | HASH JOIN | | 133 | 22743 | 1125K (19)| 03:45:09 | | |
  34. |* 6 | HASH JOIN SEMI | | 133 | 19950 | 1125K (19)| 03:45:08 | | |
  35. |* 7 | HASH JOIN | | 219 | 28251 | 1125K (19)| 03:45:08 | | |
  36. | 8 | NESTED LOOPS | | 219 | 25185 | 1125K (19)| 03:45:08 | | |
  37. | 9 | PARTITION RANGE ITERATOR | | 219 | 10074 | 1125K (19)| 03:45:03 | KEY | KEY |
  38. |* 10 | TABLE ACCESS FULL | PERF_T_PONPORT | 219 | 10074 | 1125K (19)| 03:45:03 | KEY | KE
  39. | 11 | TABLE ACCESS BY INDEX ROWID| DEVICE | 1 | 69 | 2 (0)| 00:00:01 | |
  40. |* 12 | INDEX UNIQUE SCAN | PK_DEVICE | 1 | | 1 (0)| 00:00:01 | |
  41. | 13 | TABLE ACCESS FULL | NODE | 1214 | 16996 | 8 (0)| 00:00:01 | | |
  42. |* 14 | INDEX RANGE SCAN | SYS_C00543203 | 1167 | 24507 | 10 (0)| 00:00:01 | |
  43. | 15 | TABLE ACCESS FULL | NODE | 1214 | 25494 | 8 (0)| 00:00:01 | |
  44. ----------------------------------------------------------------------------------------------------
  45. Predicate Information (identified by operation id):
  46. ---------------------------------------------------
  47. 1 - filter(ROWNUM<=10)
  48. 3 - filter(ROWNUM<=10)
  49. 4 - filter(TRUNC(SYSDATE@!-1,'fmdd')<=TRUNC(SYSDATE@!,'fmdd'))
  50. 5 - access("C"."CITYNODECODE"="NP"."NODECODE")
  51. 6 - access("C"."NODECODE"="S"."NODECODE")
  52. 7 - access("D"."NODECODE"="C"."NODECODE")
  53. 10 - filter("P"."RXCRCERROR" IS NOT NULL AND "P"."RXCRCERROR">0 AND
  54. "P"."COLTIME">=TRUNC(SYSDATE@!-1,'fmdd') AND "P"."COLTIME"<=TRUNC(SYSDATE@!,'fmdd'))
  55. 12 - access("P"."RESID"="D"."DEVICEID" AND "D"."CHANGETYPE"=0)
  56. 14 - access("S"."NETUSERID"='admin' AND "S"."AUTHTYPE"='VIEW')
  57. 已选择36行。
查看执行计划:id为4的filter过滤条件为filter(TRUNC(SYSDATE@!-1,'fmdd')<=TRUNC(SYSDATE@!,'fmdd'))。 查看id为9的执行计划访问分区的方式为:PARTITION RANGE ITERATOR。 说明分区表PERF_T_PONPORT的分区列的条件导致了性能压力。
coltime的列都是yyyy/mm/dd的格式,因此可以将PERF_T_PONPORT的分区列的条件条件改写为:(p.coltime =trunc(sysdate-1,'dd') or p.coltime =trunc(sysdate,'dd') )。

改写后的语句:
  1. with p as(
  2. select np.nodecode , np.nodename, d.deviceid, d.devicename, d.loopaddress, p.respara, p.rxcrcerror, p.txcrcerror
  3. from perf_t_ponport p,device d, node c,node np
  4. where p.resid = d.deviceid
  5. and d.nodecode = c.nodecode
  6. and c.citynodecode = np.nodecode
  7. and d.changetype = 0
  8. and c.nodecode in (SELECT S.NODECODE FROM SINGLEUSERNODEAUTH S WHERE S.NETUSERID = 'admin' AND S.AUTHTYPE = 'VIEW')
  9. and (p.coltime =trunc(sysdate-1,'dd') or p.coltime =trunc(sysdate,'dd') )
  10. and p.rxcrcerror is not null
  11. and p.rxcrcerror >0
  12. order by p.rxcrcerror desc
  13. )
  14. select *
  15. from p
  16. where rownum <=10;

改写后的执行计划:
  1. SQL> explain plan for with p as(
  2. 2 select np.nodecode , np.nodename, d.deviceid, d.devicename, d.loopaddress, p.respara, p.r
  3. xcrcerror, p.txcrcerror
  4. 3 from perf_t_ponport p,device d, node c,node np
  5. 4 where p.resid = d.deviceid
  6. 5 and d.nodecode = c.nodecode
  7. 6 and c.citynodecode = np.nodecode
  8. 7 and d.changetype = 0
  9. 8 and c.nodecode in (SELECT S.NODECODE FROM SINGLEUSERNODEAUTH S WHERE S.NETUSERID = 'admin
  10. ' AND S.AUTHTYPE = 'VIEW')
  11. 9 and (p.coltime =trunc(sysdate-1,'dd') or p.coltime =trunc(sysdate,'dd') )
  12. 10 and p.rxcrcerror is not null
  13. 11 and p.rxcrcerror >0
  14. 12 order by p.rxcrcerror desc
  15. 13 )
  16. 14 select *
  17. 15 from p
  18. 16 where rownum <=10;
  19. 已解释。
  20. SQL>
  21. SQL> select * from table(dbms_xplan.display);
  22. PLAN_TABLE_OUTPUT
  23. ----------------------------------------------------------------------------------------------------
  24. Plan hash value: 2287749996
  25. ----------------------------------------------------------------------------------------------------
  26. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  27. ----------------------------------------------------------------------------------------------------
  28. | 0 | SELECT STATEMENT | | 10 | 3430 | 915 (2)| 00:00:11 | | |
  29. |* 1 | COUNT STOPKEY | | | | | | | |
  30. | 2 | VIEW | | 266 | 91238 | 915 (2)| 00:00:11 | | |
  31. |* 3 | SORT ORDER BY STOPKEY | | 266 | 45486 | 915 (2)| 00:00:11 | | |
  32. |* 4 | HASH JOIN | | 266 | 45486 | 915 (2)| 00:00:11 | | |
  33. | 5 | TABLE ACCESS FULL | NODE | 1214 | 25494 | 8 (0)| 00:00:01 | | |
  34. |* 6 | HASH JOIN RIGHT SEMI | | 267 | 40050 | 905 (2)| 00:00:11 | | |
  35. |* 7 | INDEX RANGE SCAN | SYS_C00543203 | 1167 | 24507 | 10 (0)| 00:00:01 | |
  36. |* 8 | HASH JOIN | | 437 | 56373 | 895 (2)| 00:00:11 | | |
  37. | 9 | TABLE ACCESS FULL | NODE | 1214 | 16996 | 8 (0)| 00:00:01 | | |
  38. | 10 | NESTED LOOPS | | 437 | 50255 | 885 (2)| 00:00:11 | | |
  39. | 11 | PARTITION RANGE INLIST | | 437 | 20102 | 2 (0)| 00:00:01 |KEY(I) |KEY(I) |
  40. |* 12 | TABLE ACCESS FULL | PERF_T_PONPORT | 437 | 20102 | 2 (0)| 00:00:01 |KEY(I) |KEY(I)
  41. | 13 | TABLE ACCESS BY INDEX ROWID| DEVICE | 1 | 69 | 2 (0)| 00:00:01 | | |
  42. |* 14 | INDEX UNIQUE SCAN | PK_DEVICE | 1 | | 1 (0)| 00:00:01 | | |
  43. ----------------------------------------------------------------------------------------------------
  44. Predicate Information (identified by operation id):
  45. ---------------------------------------------------
  46. 1 - filter(ROWNUM<=10)
  47. 3 - filter(ROWNUM<=10)
  48. 4 - access("C"."CITYNODECODE"="NP"."NODECODE")
  49. 6 - access("C"."NODECODE"="S"."NODECODE")
  50. 7 - access("S"."NETUSERID"='admin' AND "S"."AUTHTYPE"='VIEW')
  51. 8 - access("D"."NODECODE"="C"."NODECODE")
  52. 12 - filter("P"."RXCRCERROR" IS NOT NULL AND "P"."RXCRCERROR">0 AND
  53. ("P"."COLTIME"=TRUNC(SYSDATE@!-1,'fmdd') OR "P"."COLTIME"=TRUNC(SYSDATE@!,'fmdd')))
  54. 14 - access("P"."RESID"="D"."DEVICEID" AND "D"."CHANGETYPE"=0)
  55. 已选择34行。

改写后, SQL执行花了9秒钟, 性能提升了9倍。改写后的SQL消除了filter, 访问分区的方式为 PARTITION RANGE INLIST 。

关于几种分区访问的方式:
范围分区:
1、PARTITION RANGE ITERATOR
  1. SQL> explain plan for select * from perf_t_ponport p where p.coltime <trunc(sysdate,'dd');
  2. 已解释。
  3. SQL> select * from table(dbms_xplan.display);
  4. PLAN_TABLE_OUTPUT
  5. ----------------------------------------------------------------------------------------------------
  6. Plan hash value: 4015217925
  7. ----------------------------------------------------------------------------------------------------
  8. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  9. ----------------------------------------------------------------------------------------------------
  10. | 0 | SELECT STATEMENT | | 100 | 4600 | 2 (0)| 00:00:01 | | |
  11. | 1 | PARTITION RANGE ITERATOR| | 100 | 4600 | 2 (0)| 00:00:01 | 1 | KEY |
  12. |* 2 | TABLE ACCESS FULL | PERF_T_PONPORT | 100 | 4600 | 2 (0)| 00:00:01 | 1 | KEY |
  13. ----------------------------------------------------------------------------------------------------
  14. Predicate Information (identified by operation id):
  15. ---------------------------------------------------
  16. 2 - filter("P"."COLTIME"<TRUNC(SYSDATE@!,'fmdd'))
  17. 已选择14行。

  1. SQL> explain plan for select * from perf_t_ponport p where p.coltime > trunc(sysdate-1,'dd') and p.
  2. coltime <trunc(sysdate,'dd');
  3. 已解释。
  4. SQL> select * from table(dbms_xplan.display);
  5. PLAN_TABLE_OUTPUT
  6. ----------------------------------------------------------------------------------------------------
  7. Plan hash value: 1162550374
  8. ----------------------------------------------------------------------------------------------------
  9. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  10. ----------------------------------------------------------------------------------------------------
  11. | 0 | SELECT STATEMENT | | 100 | 4600 | 1637 (37)| 00:00:20 | | |
  12. |* 1 | FILTER | | | | | | | |
  13. | 2 | PARTITION RANGE ITERATOR| | 100 | 4600 | 1637 (37)| 00:00:20 | KEY | KEY |
  14. |* 3 | TABLE ACCESS FULL | PERF_T_PONPORT | 100 | 4600 | 1637 (37)| 00:00:20 | KEY |
  15. ----------------------------------------------------------------------------------------------------
  16. Predicate Information (identified by operation id):
  17. ---------------------------------------------------
  18. 1 - filter(TRUNC(SYSDATE@!-1,'fmdd')<TRUNC(SYSDATE@!,'fmdd'))
  19. 3 - filter("P"."COLTIME">TRUNC(SYSDATE@!-1,'fmdd') AND "P"."COLTIME"<TRUNC(SYSDATE@!,'fmdd'))
  20. 已选择16行。

PARTITION RANGE ITERATOR是通过连续的分区迭代来获取数据。


2、PARTITION RANGE SINGLE
  1. SQL> explain plan for select * from perf_t_ponport partition(P_20170307) p;
  2. 已解释。
  3. SQL> select * from table(dbms_xplan.display);
  4. PLAN_TABLE_OUTPUT
  5. ----------------------------------------------------------------------------------------------------
  6. Plan hash value: 1021280532
  7. ----------------------------------------------------------------------------------------------------
  8. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  9. ----------------------------------------------------------------------------------------------------
  10. | 0 | SELECT STATEMENT | | 100 | 4600 | 2 (0)| 00:00:01 | | |
  11. | 1 | PARTITION RANGE SINGLE| | 100 | 4600 | 2 (0)| 00:00:01 | 85 | 85 |
  12. | 2 | TABLE ACCESS FULL | PERF_T_PONPORT | 100 | 4600 | 2 (0)| 00:00:01 | 85 |
  13. ----------------------------------------------------------------------------------------------------
  14. 已选择9行。


  1. SQL> explain plan for select * from perf_t_ponport p where p.coltime = trunc(sysdate-1,'dd') and p.
  2. coltime <trunc(sysdate,'dd');
  3. 已解释。
  4. SQL> select * from table(dbms_xplan.display);
  5. PLAN_TABLE_OUTPUT
  6. ----------------------------------------------------------------------------------------------------
  7. Plan hash value: 506920385
  8. ----------------------------------------------------------------------------------------------------
  9. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  10. ----------------------------------------------------------------------------------------------------
  11. | 0 | SELECT STATEMENT | | 100 | 4600 | 8 (25)| 00:00:01 | | |
  12. |* 1 | FILTER | | | | | | | |
  13. | 2 | PARTITION RANGE SINGLE| | 100 | 4600 | 8 (25)| 00:00:01 | KEY | KEY |
  14. |* 3 | TABLE ACCESS FULL | PERF_T_PONPORT | 100 | 4600 | 8 (25)| 00:00:01 | KEY | KE
  15. ----------------------------------------------------------------------------------------------------
  16. Predicate Information (identified by operation id):
  17. ---------------------------------------------------
  18. 1 - filter(TRUNC(SYSDATE@!-1,'fmdd')<TRUNC(SYSDATE@!,'fmdd'))
  19. 3 - filter("P"."COLTIME"=TRUNC(SYSDATE@!-1,'fmdd') AND "P"."COLTIME"<TRUNC(SYSDATE@!,'fmdd'))
  20. 已选择16行。

PARTITION RANGE SINGLE只扫描一个分区。

3、PARTITION RANGE INLIST

  1. SQL> explain plan for select * from perf_t_ponport p where p.coltime = trunc(sysdate-1,'dd') or p.c
  2. oltime = trunc(sysdate,'dd');
  3. 已解释。
  4. SQL> select * from table(dbms_xplan.display);
  5. PLAN_TABLE_OUTPUT
  6. ----------------------------------------------------------------------------------------------------
  7. Plan hash value: 2473962793
  8. ----------------------------------------------------------------------------------------------------
  9. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  10. ----------------------------------------------------------------------------------------------------
  11. | 0 | SELECT STATEMENT | | 100 | 4600 | 2 (0)| 00:00:01 | | |
  12. | 1 | PARTITION RANGE INLIST| | 100 | 4600 | 2 (0)| 00:00:01 |KEY(I) |KEY(I) |
  13. |* 2 | TABLE ACCESS FULL | PERF_T_PONPORT | 100 | 4600 | 2 (0)| 00:00:01 |KEY(I) |KEY(I)
  14. ----------------------------------------------------------------------------------------------------
  15. Predicate Information (identified by operation id):
  16. ---------------------------------------------------
  17. 2 - filter("P"."COLTIME"=TRUNC(SYSDATE@!-1,'fmdd') OR "P"."COLTIME"=TRUNC(SYSDATE@!,'fmdd'))
  18. 已选择14行。

上面的KEY(I)就是KEY(INLIST)的意思。PARTITION RANGE INLIST无法通过Pstart和Pstop看出分区的起始和结束位置 。


4、PARTITION RANGE ALL和PARTITION RANGE OR
  1. SQL> explain plan for select * from perf_t_ponport p where p.coltime >trunc(sysdate-1,'dd') or p.c
  2. oltime < trunc(sysdate-5,'dd');
  3. 已解释。
  4. SQL> select * from table(dbms_xplan.display);
  5. PLAN_TABLE_OUTPUT
  6. ----------------------------------------------------------------------------------------------------
  7. Plan hash value: 3647984539
  8. ----------------------------------------------------------------------------------------------------
  9. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  10. ----------------------------------------------------------------------------------------------------
  11. | 0 | SELECT STATEMENT | | 100 | 4600 | 2 (0)| 00:00:01 | | |
  12. | 1 | PARTITION RANGE ALL| | 100 | 4600 | 2 (0)| 00:00:01 | 1 | 101 |
  13. |* 2 | TABLE ACCESS FULL | PERF_T_PONPORT | 100 | 4600 | 2 (0)| 00:00:01 | 1 | 101 |
  14. ----------------------------------------------------------------------------------------------------
  15. Predicate Information (identified by operation id):
  16. ---------------------------------------------------
  17. 2 - filter("P"."COLTIME"<TRUNC(SYSDATE@!-5,'fmdd') OR
  18. "P"."COLTIME">TRUNC(SYSDATE@!-1,'fmdd'))
  19. 已选择15行。

ARTITION RANGE ALL是全分区扫描, 上面是在oracle 10g环境测试, 在Oracle 11g环境下,分区扫描方式为:PARTITION RANGE OR, 可以看出11g对这种分区查询条件扫描方式做了优化。
  1. SQL> explain plan for select * from perf_t_ponport p where p.coltime >trunc(sysdate-1,'dd') or p.c
  2. oltime < trunc(sysdate-5,'dd');
  3. 已解释。
  4. SQL> select * from table(dbms_xplan.display);
  5. PLAN_TABLE_OUTPUT
  6. ----------------------------------------------------------------------------------------------------
  7. Plan hash value: 470656424
  8. ----------------------------------------------------------------------------------------------------
  9. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
  10. ----------------------------------------------------------------------------------------------------
  11. | 0 | SELECT STATEMENT | | 1512M| 67G| 3783K (3)| 12:36:37 | | |
  12. | 1 | PARTITION RANGE OR| | 1512M| 67G| 3783K (3)| 12:36:37 |KEY(OR)|KEY(OR)|
  13. |* 2 | TABLE ACCESS FULL| PERF_T_PONPORT | 1512M| 67G| 3783K (3)| 12:36:37 |KEY(OR)|KEY(OR)|
  14. ----------------------------------------------------------------------------------------------------
  15. Predicate Information (identified by operation id):
  16. ---------------------------------------------------
  17. 2 - filter("P"."COLTIME"<TRUNC(SYSDATE@!-5,'fmdd') OR
  18. "P"."COLTIME">TRUNC(SYSDATE@!-1,'fmdd'))
  19. Note
  20. -----
  21. - 'PLAN_TABLE' is old version
  22. 已选择19行。






GS-PON数据库分区列范围查询优化案例的更多相关文章

  1. MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术

    逻辑查询优化包括的技术 1)子查询优化  2)视图重写  3)等价谓词重写  4)条件简化  5)外连接消除  6)嵌套连接消除  7)连接消除  8)语义优化 9)非SPJ优化 一.子查询优化 1. ...

  2. (转)mysql水平分表和垂直分表和数据库分区

    坚信数据库的物理设计在对高级数据库的性能影响上远比其他因素重要.给大家说一下经过专家对Oracle的研究,他们解释了为什么拙劣的物理设计是数据库停机(无论是有计划的还是没计划的)背后的主要原因.但在这 ...

  3. MySQL数据库分区的概念与2大好处(1)

    我们大家都知道通过MySQL数据库分区(Partition)可以提升MySQL数据库的性能,那么到底什么是MySQL数据库分区呢?以及其实际应用的好处的表现有哪些呢?以下的文章就是对这些内容的描述. ...

  4. mysql数据库分区功能及实例详解

    分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解   一,什么是数据库分区 前段时间写过一篇 ...

  5. DB2 9.5 数据库分区管理及应用实践

    DB2 数据库分区是 DB2 企业版 DPF(Data Partitioning Feature)选件提供的,它主要用来为大规模数据处理.高并发数据访问提供支持.DB2 数据库分区采用 Share-n ...

  6. Atitit.数据库分区的设计 attilax  总结

    Atitit.数据库分区的设计 attilax  总结 1. 分区就是分门别类的文件夹 (what)1 2. 分区的好处(y)1 3. 分区原则(要不要分区,何时分区)how2 4. 主要的分表类型有 ...

  7. SqlServer数据库分区

    在最近的项目中,在尽可能优化了sql语句后,上层仍要求对数据库进行优化,因为考虑到系统上线后数据量会非常庞大,而且这些个表的数据都有明显的时间划分,于是就引入了数据库分区的概念.摘用百度百科的定义,数 ...

  8. MSSQL 2005 列转行应用案例

    /*MSSQL 2005 列转行应用案例 By claro(陈亮) 2008-12-2 转载请包含此信息*/ --test table KuCunMX If object_id ('KuCunMX') ...

  9. sql2008 计划自动创建数据库分区【转】

    本文转自:http://jingyan.baidu.com/article/6b97984d9a26ec1ca3b0bf77.html sql2008 计划自动创建数据库分区 固定增量的数据,自动创建 ...

随机推荐

  1. pip安装第三方库

    不是所有的第三方Python包都能通过pip来安装,只能是发布在pypi.org上面的才能通过pip安装. pypi是什么? pypi是一个仓库,上面存放了大量的Python第三方软件包,是由Pyth ...

  2. hdu6703_array

    题意 给定一个1到\(n\)的全排列,两种操作,将\(a_{pos}\)修改为\(a_{pos}+1000000\),询问第一个大于等于\(k\)的且不在\(a_1...a_r\)的数. 分析 由于\ ...

  3. JavaScrip数据类型

    数据类型: 基础数据类型: Number String Boolean Undefined Null 引用数据类型: Object Symbol

  4. Spring学习之旅(一)--初始Spring

    之前从博客.视频断断续续的学到了 Spring 的相关知识,但是都是一个个碎片化的知识.刚好最近在读 <Sprign实战(第四版)>,所以借此机会重新整理下Spring 系列的内容. Sp ...

  5. python 33 多进程(一)

    目录 多进程 1. 进程创建的两种方式 multiprocessing 2. 进程pid (process id) 3. 验证进程之间的空间隔离 4. 进程对象join方法 5. 进程对象其他属性 6 ...

  6. MySQL数据库之单表查询中关键字的执行顺序

    目录 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 2 执行顺序 3 关键字使用语法 MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from ...

  7. Azure DevOps vsts-agent-linux 安装出错, Must not run with sudo

    在linux安装 vsts-agent-linux 在vsts-agent-linux的解压目录运行./config.sh, 提示"Must not run with sudo", ...

  8. Codeforces 814D

    题意略. 思路: 由于不重合这个性质,我们可以将每一个堆叠的圆圈单独拿出来考虑,而不用去考虑其他并列在同一层的存在, 在贪心解法下,发现,被嵌套了偶数层的圆圈永远是要被减去的,而奇数层的圆圈是要加上的 ...

  9. Javabean及其在jsp中的应用

    Javabean及其在jsp中的应用 一.Javabean简介 用作JavaBean的类必须具有一个公共的.无参数的构造方法. JavaBean的属性与普通Java类的属性的概念不一样,JavaBea ...

  10. 数据的查找和提取[2]——xpath解析库的使用

    xpath解析库的使用 在上一节,我们介绍了正则表达式的使用,但是当我们提取数据的限制条件增多的时候,正则表达式会变的十分的复杂,出一丁点错就提取不出来东西了.但python已经为我们提供了许多用于解 ...