应用这边新上线了一个查询,正在跑,让我看下状态以及分析下能不能再快点。

如下sql:

SELECT x.order_no ,
order_date+7/24 AS order_date,
address
||
district AS ADDRESS,
city ,
extn_style_number
||
'-'
||
extn_color_number ,
SUM(line_total) ,
SUM(ORDERED_QTY) ,
CASE
WHEN division='55'
THEN 'SWOOSH'
ELSE ''
END AS SWOOSH,
CASE
WHEN lower (MRKTNG_CHNNL_ORDR_EXTN_MV.LAST_TOUCH_TRACKING_CODE) LIKE '%cnns_ksk%'
THEN 'SEAMLESS'
ELSE ''
END AS SEAMLESS,
CASE
WHEN line_type='NIKEID'
THEN 'NIKEID'
ELSE ''
END AS NIKEID
FROM
(
SELECT DISTINCT l.line_type ,
s.status ,
order_DATE ,
order_no ,
retail_price ,
ORDERED_QTY ,
division ,
l.line_total ,
l.item_description ,
l.extn_size_description ,
l.extn_style_number ,
l.extn_color_number ,
l.list_price ,
pp.address_line1 AS address ,
pp.address_line4 AS district,
pp.city
FROM dom.yfs_order_header h ,
dom.yfs_ordeR_line l ,
dom.yfs_order_release_status s,
dom.yfs_person_info pp
WHERE h.order_header_key = l.order_header_key
AND l.order_line_key = s.order_line_key
AND pp.person_info_key = h.bill_to_key
AND h.enterprise_key = 'NIKECN'
AND s.status_quantity > 0
AND document_type = '0001'
AND l.LINE_TOTAL >0
AND s.status <> '9000'
AND h.division IN ('55','400')
AND order_date +7/24 >= to_date('01-Jun-15','DD-MON-YY')
AND order_date +7/24 < to_date('01-Nov-15','DD-MON-YY')
AND h.order_type <>'legacy'
AND
(
order_purpose <>'REFUND'
OR order_purpose IS NULL
)
AND
(
ORDER_TYPE <>'ProductVoucher'
OR ORDER_TYPE IS NULL
)
)
X
LEFT OUTER JOIN NTCOM.MRKTNG_CHNNL_ORDR_EXTN_MV MRKTNG_CHNNL_ORDR_EXTN_MV
ON X.ORDER_NO=MRKTNG_CHNNL_ORDR_EXTN_MV.ORDER_NO
GROUP BY x.order_no ,
order_date+7/24,
address
||
district,
city ,
extn_style_number
||
'-'
||
extn_color_number,
CASE
WHEN division='55'
THEN 'SWOOSH'
ELSE ''
END,
CASE
WHEN lower (MRKTNG_CHNNL_ORDR_EXTN_MV.LAST_TOUCH_TRACKING_CODE) LIKE '%cnns_ksk%'
THEN 'SEAMLESS'
ELSE ''
END,
CASE
WHEN line_type='NIKEID'
THEN 'NIKEID'
ELSE ''
END
UNION ALL
SELECT y.order_no ,
order_date+7/24 AS order_date,
address
||
district AS ADDRESS,
city ,
extn_style_number
||
'-'
||
extn_color_number ,
SUM(line_total) ,
SUM(ORDERED_QTY) ,
CASE
WHEN division='55'
THEN 'SWOOSH'
ELSE ''
END AS SWOOSH,
CASE
WHEN lower (MRKTNG_CHNNL_ORDR_EXTN_MV.LAST_TOUCH_TRACKING_CODE) LIKE '%cnns_ksk%'
THEN 'SEAMLESS'
ELSE ''
END AS SEAMLESS,
CASE
WHEN line_type='NIKEID'
THEN 'NIKEID'
ELSE ''
END AS NIKEID
FROM
(
SELECT DISTINCT l.line_type ,
s.status ,
order_DATE ,
order_no ,
retail_price ,
ORDERED_QTY ,
division ,
l.line_total ,
l.item_description ,
l.extn_size_description ,
l.extn_style_number ,
l.extn_color_number ,
l.list_price ,
pp.address_line1 AS address ,
pp.address_line4 AS district,
pp.city
FROM dom.yfs_order_header_H h ,
dom.yfs_ordeR_line_H l ,
dom.yfs_order_release_status_H s,
dom.yfs_person_info pp
WHERE h.order_header_key = l.order_header_key
AND l.order_line_key = s.order_line_key
AND pp.person_info_key = h.bill_to_key
AND h.enterprise_key = 'NIKECN'
AND s.status_quantity > 0
AND document_type = '0001'
AND l.LINE_TOTAL >0
AND s.status <> '9000'
AND h.division IN ('55','400')
AND order_date +7/24 >= to_date('01-Jun-15','DD-MON-YY')
AND order_date +7/24 < to_date('01-Nov-15','DD-MON-YY')
AND h.order_type <>'legacy'
AND
(
order_purpose <>'REFUND'
OR order_purpose IS NULL
)
AND
(
ORDER_TYPE <>'ProductVoucher'
OR ORDER_TYPE IS NULL
)
)
Y
LEFT OUTER JOIN NTCOM.MRKTNG_CHNNL_ORDR_EXTN_MV MRKTNG_CHNNL_ORDR_EXTN_MV
ON Y.ORDER_NO=MRKTNG_CHNNL_ORDR_EXTN_MV.ORDER_NO
GROUP BY 1,2,3,4,......;

大致的结构就是两个select语句做union的操作

一个select现在的表,一个select历史表

来继续看下执行计划,

-----------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 227K(100)| |
| 1 | UNION-ALL | | | | | |
| 2 | HASH GROUP BY | | 169 | 24674 | 93719 (1)| 00:35:56 |
|* 3 | HASH JOIN OUTER | | 169 | 24674 | 93718 (1)| 00:35:56 |
| 4 | VIEW | | 169 | 17914 | 20470 (1)| 00:07:51 |
| 5 | HASH UNIQUE | | 169 | 53235 | 20470 (1)| 00:07:51 |
|* 6 | FILTER | | | | | |
| 7 | NESTED LOOPS | | 169 | 53235 | 20469 (1)| 00:07:51 |
| 8 | NESTED LOOPS | | 846 | 53235 | 20469 (1)| 00:07:51 |
| 9 | NESTED LOOPS | | 94 | 26226 | 19659 (1)| 00:07:33 |
| 10 | NESTED LOOPS | | 50 | 8100 | 19428 (1)| 00:07:27 |
|* 11 | TABLE ACCESS BY INDEX ROWID| YFS_ORDER_HEADER | 50 | 4900 | 19278 (1)| 00:07:24 |
|* 12 | INDEX RANGE SCAN | YFS_ORDER_HEADER_I2 | 1151 | | 18386 (1)| 00:07:03 |
| 13 | TABLE ACCESS BY INDEX ROWID| YFS_PERSON_INFO | 1 | 64 | 3 (0)| 00:00:01 |
|* 14 | INDEX UNIQUE SCAN | YFS_PERSON_INFO_PK | 1 | | 2 (0)| 00:00:01 |
|* 15 | TABLE ACCESS BY INDEX ROWID | YFS_ORDER_LINE | 2 | 234 | 6 (0)| 00:00:01 |
|* 16 | INDEX RANGE SCAN | YFS_ORDER_LINE_I1 | 3 | | 3 (0)| 00:00:01 |
|* 17 | INDEX RANGE SCAN | YFS_ORDER_RELEASE_STATUS_I2 | 9 | | 3 (0)| 00:00:01 |
|* 18 | TABLE ACCESS BY INDEX ROWID | YFS_ORDER_RELEASE_STATUS | 2 | 72 | 11 (0)| 00:00:01 |
| 19 | MAT_VIEW ACCESS FULL | MRKTNG_CHNNL_ORDR_EXTN_MV | 41M| 1590M| 73144 (1)| 00:28:03 |
| 20 | HASH GROUP BY | | 1591 | 231K| 133K (1)| 00:51:21 |
|* 21 | HASH JOIN OUTER | | 1591 | 231K| 133K (1)| 00:51:21 |
| 22 | VIEW | | 1591 | 169K| 60705 (1)| 00:23:17 |
| 23 | HASH UNIQUE | | 1591 | 531K| 60705 (1)| 00:23:17 |
|* 24 | FILTER | | | | | |
| 25 | NESTED LOOPS | | 1591 | 531K| 60704 (1)| 00:23:17 |
| 26 | NESTED LOOPS | | 1591 | 531K| 60704 (1)| 00:23:17 |
| 27 | NESTED LOOPS | | 1591 | 461K| 54351 (1)| 00:20:51 |
| 28 | NESTED LOOPS | | 477 | 85860 | 52237 (1)| 00:20:02 |
|* 29 | TABLE ACCESS BY INDEX ROWID| YFS_ORDER_HEADER_H | 477 | 55332 | 50806 (1)| 00:19:29 |
|* 30 | INDEX RANGE SCAN | YFS_ORDER_HEADER_H_I2 | 12374 | | 38482 (1)| 00:14:46 |
| 31 | TABLE ACCESS BY INDEX ROWID| YFS_PERSON_INFO | 1 | 64 | 3 (0)| 00:00:01 |
|* 32 | INDEX UNIQUE SCAN | YFS_PERSON_INFO_PK | 1 | | 2 (0)| 00:00:01 |
|* 33 | TABLE ACCESS BY INDEX ROWID | YFS_ORDER_LINE_H | 3 | 351 | 6 (0)| 00:00:01 |
|* 34 | INDEX RANGE SCAN | YFS_ORDER_LINE_H_I1 | 4 | | 3 (0)| 00:00:01 |
|* 35 | INDEX RANGE SCAN | YFS_ORDER_RELEASE_STATUS_H_I2 | 1 | | 3 (0)| 00:00:01 |
|* 36 | TABLE ACCESS BY INDEX ROWID | YFS_ORDER_RELEASE_STATUS_H | 1 | 45 | 4 (0)| 00:00:01 |
| 37 | MAT_VIEW ACCESS FULL | MRKTNG_CHNNL_ORDR_EXTN_MV | 41M| 1590M| 73144 (1)| 00:28:03 |
-----------------------------------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

1 - SET$1
2 - SEL$97EC0181
4 - SEL$7C87FA5C / X@SEL$2
5 - SEL$7C87FA5C
11 - SEL$7C87FA5C / YFS_ORDER_HEADER@SEL$4
12 - SEL$7C87FA5C / YFS_ORDER_HEADER@SEL$4
13 - SEL$7C87FA5C / PP@SEL$3
14 - SEL$7C87FA5C / PP@SEL$3
15 - SEL$7C87FA5C / YFS_ORDER_LINE@SEL$5
16 - SEL$7C87FA5C / YFS_ORDER_LINE@SEL$5
17 - SEL$7C87FA5C / S@SEL$3
18 - SEL$7C87FA5C / S@SEL$3
19 - SEL$97EC0181 / MRKTNG_CHNNL_ORDR_EXTN_MV@SEL$1
20 - SEL$6FC1811E
22 - SEL$A5E413B3 / Y@SEL$8
23 - SEL$A5E413B3
29 - SEL$A5E413B3 / YFS_ORDER_HEADER_H@SEL$10
30 - SEL$A5E413B3 / YFS_ORDER_HEADER_H@SEL$10
31 - SEL$A5E413B3 / PP@SEL$9
32 - SEL$A5E413B3 / PP@SEL$9
33 - SEL$A5E413B3 / YFS_ORDER_LINE_H@SEL$11
34 - SEL$A5E413B3 / YFS_ORDER_LINE_H@SEL$11
35 - SEL$A5E413B3 / S@SEL$9
36 - SEL$A5E413B3 / S@SEL$9
37 - SEL$6FC1811E / MRKTNG_CHNNL_ORDR_EXTN_MV@SEL$7

Predicate Information (identified by operation id):
---------------------------------------------------

3 - access("X"."ORDER_NO"="MRKTNG_CHNNL_ORDR_EXTN_MV"."ORDER_NO")
6 - filter(TO_DATE('01-Nov-15','DD-MON-YY')>TO_DATE('01-Jun-15','DD-MON-YY'))
11 - filter((INTERNAL_FUNCTION("DIVISION") AND ("ORDER_PURPOSE" IS NULL OR "ORDER_PURPOSE"<>'REFUND') AND
"ORDER_TYPE"<>'ProductVoucher' AND "ORDER_TYPE"<>'legacy'))
12 - access("DOCUMENT_TYPE"='0001' AND "ENTERPRISE_KEY"='NIKECN')
filter((INTERNAL_FUNCTION("ORDER_DATE")+.2916666666666666666666666666666666666667>=TO_DATE('01-Jun-15','
DD-MON-YY') AND INTERNAL_FUNCTION("ORDER_DATE")+.2916666666666666666666666666666666666667<TO_DATE('01-Nov-15','
DD-MON-YY')))
14 - access("PP"."PERSON_INFO_KEY"="BILL_TO_KEY")
15 - filter("LINE_TOTAL">0)
16 - access("ORDER_HEADER_KEY"="ORDER_HEADER_KEY")
17 - access("ORDER_LINE_KEY"="S"."ORDER_LINE_KEY")
18 - filter(("S"."STATUS_QUANTITY">0 AND "S"."STATUS"<>'9000'))
21 - access("Y"."ORDER_NO"="MRKTNG_CHNNL_ORDR_EXTN_MV"."ORDER_NO")
24 - filter(TO_DATE('01-Nov-15','DD-MON-YY')>TO_DATE('01-Jun-15','DD-MON-YY'))
29 - filter((INTERNAL_FUNCTION("DIVISION") AND "ORDER_TYPE"<>'ProductVoucher' AND ("ORDER_PURPOSE" IS NULL
OR "ORDER_PURPOSE"<>'REFUND') AND "ORDER_TYPE"<>'legacy'))
30 - access("DOCUMENT_TYPE"='0001' AND "ENTERPRISE_KEY"='NIKECN')
filter((INTERNAL_FUNCTION("ORDER_DATE")+.2916666666666666666666666666666666666667>=TO_DATE('01-Jun-15','
DD-MON-YY') AND INTERNAL_FUNCTION("ORDER_DATE")+.2916666666666666666666666666666666666667<TO_DATE('01-Nov-15','
DD-MON-YY')))
32 - access("PP"."PERSON_INFO_KEY"="BILL_TO_KEY")
33 - filter("LINE_TOTAL">0)
34 - access("ORDER_HEADER_KEY"="ORDER_HEADER_KEY")
35 - access("ORDER_LINE_KEY"="S"."ORDER_LINE_KEY")
36 - filter(("S"."STATUS"<>'9000' AND "S"."STATUS_QUANTITY">0))

======================

在做了稍微的分析,得出如下三点可以改进的意见:

1.看了下原始sql的执行计划,里面有filter的步骤,如下:

AND order_date  +7/24      >= to_date('01-Dec-14','DD-MON-YY')

AND order_date   +7/24      < to_date('01-Jun-15','DD-MON-YY')

Predicate Information (identified by operation id):

filter((INTERNAL_FUNCTION("ORDER_DATE")+.2916666666666666666666666666666666666667>=TO_DATE('01-Jun-15','DD-MON-YY') AND

INTERNAL_FUNCTION("ORDER_DATE")+.2916666666666666666666666666666666666667<TO_DATE('01-Nov-15','DD-MON-YY')))

于是想着应该这样写,可以走索引:

AND order_date        >= to_date('01-Dec-14','DD-MON-YY')-7/24

AND order_date         < to_date('01-Jun-15','DD-MON-YY')-7/24

改成这样之后的执行计划:

10 - access("DOCUMENT_TYPE"='0001' AND "H"."ENTERPRISE_KEY"='NIKECN' AND "ORDER_DATE">=TO_DATE('01-Dec-14','DD-MON-YY')-.291666666666666666666666666666

6666666667 AND "ORDER_DATE"<TO_DATE('01-Jun-15','DD-MON-YY')-.2916666666666666666666666666666666666667)

当然为什么写7/24,因为这里的日期没有小时,也不知道app的人怎么想的,如下:

SQL> select to_date('01-Dec-14','DD-MON-YY') from dual;

01-DEC-14

SQL> select to_date('01-Dec-14','DD-MON-YY')-7/24 from dual;

30-NOV-14

SQL> select to_date('01-Dec-14','DD-MON-YY')-1 from dual;

30-NOV-14

因为to_date这里只有DD-MON-YY格式

2.这个sql是两个select分别去join一张物化视图,然后再去union all

为何不先union all再去join物化视图呢,这样可以减少一次物化视图的扫描。

原始的执行计划如下:

===================================================================================================================================================================================================================================

| Id    |                Operation                |             Name              | 
Rows   | Cost  |   Time    | Start 
| Execs |   Rows   | Read 
| Read  | Mem | Activity |             Activity Detail         | Progress |

|       |                                         |                               | (Estim) |       | Active(s) | Active |       | (Actual) | Reqs  | Bytes |    
|   (%)    |               (# samples)           |          |

===================================================================================================================================================================================================================================

|  -> 0 | SELECT STATEMENT                        |                               |         |      
|      1610 |    +84 |    
1 |    86400 |       |      
|     |          |                            |   |

|  -> 1 |   UNION-ALL                             |                               |         |      
|      1610 |    +84 |    
1 |    86400 |       |      
|     |          |

19 |     
MAT_VIEW ACCESS FULL              
| MRKTNG_CHNNL_ORDR_EXTN_MV    
|     42M | 73144 |        17 |   
+68 |     1 |      42M | 
2854 |   3GB

37 |      MAT_VIEW ACCESS FULL               | MRKTNG_CHNNL_ORDR_EXTN_MV     |    
42M | 73144 |        37 |  +1456 |    
1 |      42M |  2852 |  
3GB |

可以看到第19步和第37步都做了物化视图的全扫描,最后才去union
all

所以可以改成两个select语句先去union
all再去join这个物化视图

3.物化视图的索引没用上

可以看到物化视图走的是全表扫描这样的执行计划,但是check一下上面是有索引的,

连接条件如下

LEFT OUTER JOIN
NTCOM.MRKTNG_CHNNL_ORDR_EXTN_MV MRKTNG_CHNNL_ORDR_EXTN_MV   ON     
X.ORDER_NO=MRKTNG_CHNNL_ORDR_EXTN_MV.ORDER_NO

select table_name, owner,num_rows, blocks,
last_analyzed,partitioned

from dba_tables

where table_name ='MRKTNG_CHNNL_ORDR_EXTN_MV';

MRKTNG_CHNNL_ORDR_EXTN_MV      NTCOM                            41692893     362436 24-DEC-16 NO

select table_name, index_name, column_name,
column_position

from dba_ind_columns

where table_name ='MRKTNG_CHNNL_ORDR_EXTN_MV'

order by 1, 2, 4;

TABLE_NAME                     INDEX_NAME                     COLUMN_NAME                              COLUMN_POSITION

------------------------------
------------------------------ ----------------------------------------
---------------

MRKTNG_CHNNL_ORDR_EXTN_MV      I_SNAP$_MRKTNG_CHNNL_ORDR_     SYS_NC00024$                                           1

MRKTNG_CHNNL_ORDR_EXTN_MV      I_SNAP$_MRKTNG_CHNNL_ORDR_     SYS_NC00025$                                           2

MRKTNG_CHNNL_ORDR_EXTN_MV      I_SNAP$_MRKTNG_CHNNL_ORDR_     SYS_NC00026$                                           3

MRKTNG_CHNNL_ORDR_EXTN_MV      I_SNAP$_MRKTNG_CHNNL_ORDR_     SYS_NC00027$                                           4

select TABLE_NAME,COLUMN_NAME,COLUMN_ID
from dba_tab_cols where table_name='MRKTNG_CHNNL_ORDR_EXTN_MV';

TABLE_NAME                     COLUMN_NAME                               COLUMN_ID

------------------------------
---------------------------------------- ----------

MRKTNG_CHNNL_ORDR_EXTN_MV      ORDER_REPORT_DT_DIM_ID                            4

MRKTNG_CHNNL_ORDR_EXTN_MV      LAST_TOUCH_TRACKING_CODE                          3

MRKTNG_CHNNL_ORDR_EXTN_MV      GEO_KEY                                           2

MRKTNG_CHNNL_ORDR_EXTN_MV      ORDER_NO                                          1

select index_type from dba_indexes where
table_name ='MRKTNG_CHNNL_ORDR_EXTN_MV';

INDEX_TYPE

---------------------------

FUNCTION-BASED NORMAL

select table_name, column_name,
num_distinct, histogram

from dba_tab_col_statistics

where table_name ='MRKTNG_CHNNL_ORDR_EXTN_MV'

order by 1, 2;

TABLE_NAME                     COLUMN_NAME                              NUM_DISTINCT
HISTOGRAM

------------------------------
---------------------------------------- ------------ ---------------

MRKTNG_CHNNL_ORDR_EXTN_MV      ORDER_NO                                     41692847
HEIGHT BALANCED

SELECT dbms_metadata.get_ddl('TABLE',
'MRKTNG_CHNNL_ORDR_EXTN_MV','NTCOM') FROM DUAL;可以看到物化视图的定义

可以让这个物化视图走下索引看看效率,要是效率不行的话,那就只能全表扫描了。当然可以专门为这个物化视图加个parallel hint从而全表扫的时候更快。

走索引并没有做测试

后面测了其中一个select的执行时间,大约30S左右,提升了很多。估计整个union做完就1-3mins。比之前的45mins快多了。

以上三点就是看了这个sql的执行计划得出来的结论,总结如下:

1.索引没走因为谓词的条件写的不规范

2.select join与union的逻辑,稍微重写下在逻辑不变的情况下可以减少一次物化视图全表扫描

3.物化视图也可以走索引,从而看看有没有加快查询的可能性,这里走了全表扫描。

=======================================ENDED================

关于一个sql的优化分析的更多相关文章

  1. 一个sql的优化

    原文:一个sql的优化 目的:为了查询某天某个服务器上的登录id的个数   刚开始编写的sql: select count(a.mac) logusers from Log_MacLogin_All ...

  2. SQL语句优化分析

    分析比较执行时间计划读取情况 select * from dbo.Product 执行上面语句一般情况下只给你返回结果和执行行数,那么你怎么分析呢,怎么知道优化之后跟没有优化的区别呢. 下面几种方法: ...

  3. 一个 Sql语句优化的问题- STATISTICS 统计信息

    前段时间,同事遇到一个 Sql语句的问题,一个列表分页功能响应在30 s以上,看数据库里面的数据条数,数据量也不大,相关字段的一些索引也都有,可就是慢.于是找出具体的sql 语句出来分析,分页功能主要 ...

  4. 看懂SqlServer查询计划 SQL语句优化分析

    转自 http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 阅读目录 开始 SQL Server 查找记录的方法 SQL Ser ...

  5. SQL性能优化案例分析

    这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...

  6. SQL Server优化技巧——如何避免查询条件OR引起的性能问题

    之前写过一篇博客"SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析",里面介绍了OR可能会引起全表扫描或索引扫描的各种案例,以及如何优化查询条件中含有OR的SQL语句的 ...

  7. SQL Server优化技巧——如何避免查询条件OR引起的性能问题

    原文:SQL Server优化技巧--如何避免查询条件OR引起的性能问题 之前写过一篇博客"SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析",里面介绍了OR可能会引起 ...

  8. [转]一个用户SQL慢查询分析,原因及优化

    来源:http://blog.rds.aliyun.com/2014/05/23/%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7sql%E6%85%A2%E6%9F%A5%E ...

  9. 分析oracle的执行计划(explain plan)并对对sql进行优化实践

    基于oracle的应用系统很多性能问题,是由应用系统sql性能低劣引起的,所以,sql的性能优化很重要,分析与优化sql的性能我们一般通过查看该sql的执行计划,本文就如何看懂执行计划,以及如何通过分 ...

随机推荐

  1. 1Z0-053 争议题目解析154

    1Z0-053 争议题目解析154 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 154.A database is running in ARCHIVELOG mode and ...

  2. StructureMap.dll 中的 GetInstance 重载 + 如何利用 反射动态创建泛型类

    public static T GetInstance<T>(ExplicitArguments args); // // Summary: // Creates a new instan ...

  3. JS查找数组中出现的位置及个数

    查找某个值在数组中出现的位置 var attr = [1,4,5,3,2,7,6,9]; var zhao = 8; var sy = -1; for(var i=0;i<attr.length ...

  4. [Nancy On .Net Core Docker] 轻量级的web框架

    .net core现在已经有了大的发展,虽然笔者现在已经从事python开发,但是一直在关注.net的发展,在逛博客园的时候,发现有大家都会提到Nancy这个框架,在简单的使用之后,发现竟然是如此的简 ...

  5. SQL常见的系统存储过程

    1.sp_datebases 列出服务器上的所有数据库信息,包括数据库名称和数据库大小 例:exec sp_datebases 2.sp_helpdb 报告有关指定数据库或所有数据库的信息 例:exe ...

  6. assign()

  7. C#-Socket监听消息处理

    TCP/IP:Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议,又名网络通讯协议.简单来说:TCP控制传输数据,负责发现传输 ...

  8. 5、python第一天作业

    作业一:编写登陆接口 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 分析: 1.流程控制图 2.编写思路 以r+(读写模式)打开文件,读取文件内容字符串,再写入文件,以字符串的长 ...

  9. 深入Java关键字this的用法的总结

    在Java程序设计中经常会见到this的使用,this使得程序设计变得规范.简单.灵活.但是在使用过程中,在不同场 合它的含义并不完全相同,使用不当还会出现错误, 本文对this的几种用法和出现的问题 ...

  10. 【HTML】 frame和iframe的区别

    1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...