TAG:数据库相关
原作者:edobnet 项目介绍
我们的简要方案。
并发数 平均每秒请求数 未字节响应毫秒数
因为一个统计,有一个很多组合的WHERE,比如有十个指标这样会有十次访问原表,这样性能太低,所以我们把where后的数据作
一个存储过程样例,有兴趣可以分析一下! 1SET QUOTED_IDENTIFIER ON
2GO 3SET ANSI_NULLS ON 4GO 5 6 7 8 9 10ALTER Procedure sp_tg009 11 /**//* Param List */ 12 @TE_I_E_FLAG varchar(4),/**//*进出口方式*/ 13 @TE_PASS_RANGE varchar(4),/**//*关区范围*/ 14 @TE_C_OUTPUT varchar(4),/**//*输出方式退单理由输出、申报单位输出、全部输出*/ 15 @TE_END_DATE datetime,/**//**********申报起止日期********/ 16 @TE_END_DATEEND datetime,/**//*************************/ 17 @TE_MONI_T varchar(4),/**//*监控类型*/ 18 @USER_ID varchar(64), 19 @CUSTOMER_CODE varchar(4), 20 @PAGE_NUMBER int, 21 @TOTAL_COUNT int OUTPUT 22AS 23 24/**//****************************************************************************** 25** File: 26** Name: sp_tg009 27** Desc: 通关业务监控-通关规范监控-报关单退(拒)单管理 28** 29** This template can be customized: 30** 31** Return values: 32** 33** Called by: 34** 35** Parameters: 36** Input Output 37** ---------- ----------- 38** 39** Auth: chengdj 40** Date: 2005-4-7 41******************************************************************************* 42** Change History 43******************************************************************************* 44** Date: Author: Description: 45** -------- -------- ------------------------------------------- 46** 2005-04-11 chengdj add HgDiv function 47** 2005-04-11 chengdj 48*******************************************************************************/ 49SET NOCOUNT ON 50 51declare @sqlWhere varchar(4000) 52set @sqlWhere = ‘‘ 53 54set @TE_END_DATEEND = DATEADD(Day,1,@TE_END_DATEEND) --结束日期加一天 55set @sqlWhere = @sqlWhere + ‘ TE_END_DATE >= ‘‘‘+ CONVERT(varchar(20),@TE_END_DATE) +‘‘‘ and TE_END_DATE < ‘‘‘+CONVERT(varchar(20),@TE_END_DATEEND)+‘‘‘‘ 56 57if @TE_I_E_FLAG <> ‘-2‘ ----进出口 58 set @sqlWhere = @sqlWhere + ‘ and TE_I_E_FLAG = ‘‘‘+@TE_I_E_FLAG+‘‘‘‘ 59 60if @TE_PASS_RANGE <> ‘-2‘ --关区范围 61 set @sqlWhere = @sqlWhere + ‘ and TE_PASS_RANGE in ( SELECT a.GCL_CODE 62FROM GL_CUSTOMER_LIST a CROSS JOIN 63 GL_CUSTOMER_LIST b 64WHERE (a.GCL_LAYER LIKE b.GCL_LAYER + ‘‘%‘‘) AND (b.GCL_CODE = ‘‘‘+@TE_PASS_RANGE+‘‘‘)) ‘ 65 66/**//* if @TE_C_OUTPUT<> ‘-2‘ --输出方式 67 set @sqlWhere = @sqlWhere + ‘and ‘ 68****************监控类型**********************/ 69 70 /**//*if @TE_MONI_T <> ‘-2‘ --监控类型 71 if @TE_MONI_T = ‘2‘ 72 set @sqlWhere = @sqlWhere + ‘ AND TE_SCENE_FLAG = 1 ‘ 73 else 74 set @sqlWhere = @sqlWhere + ‘ AND TE_WORKER_FLAG = ‘ +@TE_MONI_T + ‘ ‘*/ 75/**//* 76CREATE TABLE #TG009( 77 TE_PASS_RANGE VARCHAR(4) PRIMARY KEY NOT NULL, 78 MAN_CLE_COUNT int null, --人工退单报关单总数 79 MAN_CLE_TOTAL int null, --人工退单报关单总数 80 MAN_CLE_PCT float null, --人工退单率 81 ELC_CLE_COUNT int null, --电子退单总数 82 ELC_CLE_TOTAL int null, --电子退单总次数 83 MAN_MU_COUNT int null, --多次人工退单报关单数 84 ELC_CLE_PCT float null, --电子退单率-- 85 RE_COUNT int null, --现场拒单报关单总数-- 86 RE_TOTAL int null, --现场拒单报关单总次数-- 87 RE_PCT float null, --现场拒单报关单率-- 88 MU_ELC_CEL_EXP float null, --多次电子退单指数 89 MU_MAN_EXP float null, --多次人工退单指数 90 MU_SEC_EXP float null --多次现场拒单指数 91) 92 */ 93 declare @sql varchar(8000) 94 declare @groupby varchar(50) 95 96 if @TE_C_OUTPUT = ‘1‘ --按申报单位 97 set @groupby = ‘TE_AGENT_CODE‘ 98 else --其它按关区 99 set @groupby = ‘TE_PASS_RANGE‘ 100 101 declare @sql2 nvarchar(500) 102 set @sql2 = ‘select @COUNT = count(distinct(‘+@groupby+‘)) from TG_ENTRY where ‘+@sqlWhere 103 execute sp_executesql 104 @sql2, 105 N‘@COUNT int output‘, 106 @TOTAL_COUNT output 107 108DECLARE @START_ID INT 109DECLARE @END_ID INT 110SET @START_ID = (@PAGE_NUMBER - 1) * 15 + 1 111SET @END_ID = @PAGE_NUMBER * 15 112 113 ---- 114 ---- 115 ----- 116 if @TE_MONI_T = ‘1‘ --人工退单 117 set @sql = ‘ 118 select top ‘+convert(varchar(20),@END_ID)+ ‘ ‘+ @groupby +‘,IDENTITY(int,1,1) AS TID into #PAGE from TG_ENTRY where ‘+@sqlWhere +‘ group by ‘+@groupby+ ‘; 119 CREATE TABLE #TG009( 120 ‘+ @groupby+‘ VARCHAR(10) PRIMARY KEY NOT NULL, 121 MAN_CLE_COUNT int null, 122 MAN_CLE_TOTAL int null, 123 MAN_CLE_PCT numeric(10,2) null, 124 MU_MAN_EXP numeric(10,2) null, 125 MAN_CLE_TOTAL1 int null, 126 MAN_CLE_TOTAL2 int null, 127 MAN_CLE_TOTAL3 int null 128 ); 129 130 SELECT ‘+ @groupby+‘,TE_CANCEL_FLAG,TE_WORKER_FLAG,TE_END_FLAG,TE_CANCEL_TIME INTO #temp1 FROM TG_ENTRY where‘+@sqlWhere+‘ AND ‘+@groupby+‘ in ( select ‘+ @groupby +‘ from #PAGE where TID between ‘+ convert |
|