用现在的存储过程和函数好慢呀,有办法win7黑屏解决办法吗

关于存储过程中调用了自定义的一个函数,速度超慢,请教如何解决的搜索推荐 -oracle-TryCatch
>> 相关推荐
关于的搜索推荐
我在oracle中写了一个存储过程,并在存储过程中调用了一个自定义的一个函数,但是速度就慢下来了,如果不调用自定义函数就很快。请教各位大虾这是怎么回事,如何解决?十分感谢!
引用楼主yiyu918的回复:
我在oracle中写了一个存储过程,并在存储过程中调用了一个自定义的一个函数,但是速度就慢下来了,如果不调用自定义函数就很快。请教各位大虾这是怎么回事,如何解决?十分感谢!
单独执行函数是个什么情况呢?
单独执行函数快一些,需要2秒多一点
看不到内容,想不出对策
我写好了一个函数,一个存储调用之后速度变的很慢,但是我把存储过程COPE到SQL窗口来运行,并且给它一样的参数,速度很快,请问是什么原因
------------
我做的系统大概是这样一个结构.主表A子表(B,C,D等等很多个)比如有港口表.银行表,船期表等等,大概有20多个这样的基本表,这些子表的设计结构基本上都是code,codena...
我的后台数据库是sqlserver,在连锁店那边盘点的时候调用了三个存储过程,先从多个复杂表中查得数据,分别插入到三张表中,然后数据窗口读取三张表中的数据.其中必然...
我在存取过程中调用了另外的存取过程,结果多返回一个结果集,请问怎么过滤掉这个结果集
------------
你调用别的存储过程时,不能直接调用,只要获取返回值就可...
ExtJs中tabpanel用了autoLoad加载一个gridpanel页面之后,gridpanel的速度会很慢,分页慢得像蜗牛,请问怎么解决?望指点!
------------
是因为数据量很大吗?...
如题 求高手 深入解析我用宏定义一个对象 调用了构造函数 调用了成员函数 但是整个程序结束的时候 为什么没有调用析构函数
------------
你的代码 在哪儿?我表...
在一个存储过程中怎样调用一个自定义函数返回的表变量给个列子
------------
参考如下:CREATEFUNCTIONdbo.function1(@paraint)RETURNS@tableTABLE(idnvarchar...
一个论坛浏览速度太慢了,把存放帖子的表改成了heap结构的,但是没有任何效果?请教各位大虾指点,heap结构要怎么做才能最大程度的提高读取速度?
------------
...
请高手简单讲讲 编这个程序:“能够查询本机所有的进程中,哪些进程中调用了特定的动态链接库”的思路和方法,多谢了,急!~
------------
---------...
SQL 1:select dbo.GetHL('USD',table.HB) HL from tableSQL 2: select (select top 1 t1.ZL/t2.ZL from t1 left join t2 on t1.id=t2.id where t1.HB='USD\...
进程函数UINT Write(LPVOID pParam) {while(a--==0){
CBDlg::OnReg();a=10;}} 想调用对话框中的按钮对应得到私有函数CBDlg::OnReg(),应...
我有4个表,A表有500条数据, B表有8条,C表有3条, D表有6条,现在用交叉组合成72000条数据,写入另外一个表中,用存储过程实现,耗时50秒左右,这个速度算不算...
请教各位大师,如何自定义INTERBASE 数据库函数?,请给个例人吧!多谢了!!!...
这问题很简单
但是我不会
呜呜CREATE FUNCTION GetJXCTJRuKu(@cpid int,@tjrq datetime)RETURNS floatASBEGINdeclare @ruku floatselect @ruku=(select RuKuS...
请教:在自定义全局函数中,如何通过参数传递自定义用户对象的动态数组?
------------
uo_1 aa[]f_user(aa)
aa 类型为uo_1是这个意思吗?
------------大家有什么好的存储过程优化方法吗?该如何解决 - Sql Server当前位置:& &&&大家有什么好的存储过程优化方法吗?该如何解决大家有什么好的存储过程优化方法吗?该如何解决&&网友分享于:&&浏览:3次大家有什么好的存储过程优化方法吗?公司里有个存储过程,写了几千行代码。其中用了10几张临时表。很多临时变量。我想问下大家,平时写存储过程有没有什么好的优化方法,经验呢?希望大家说的方法越多越好。------解决方案--------------------
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/songguozhi/archive//5883191.aspxSQL code
优化存储过程有很多种方法,下面介绍最常用的7种。
1.使用SET NOCOUNT ON选项
我们使用SELECT语句时,除了返回对应的结果集外,还会返回相应的影响行数。使用SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减小网络流量。
2.使用确定的Schema
在使用表,存储过程,函数等等时,最好加上确定的Schema。这样可以使SQL Server直接找到对应目标,避免去计划缓存中搜索。而且搜索会导致编译锁定,最终影响性能。比如select * from dbo.TestTable比select * from TestTable要好。from TestTable会在当前Schema下搜索,如果没有,再去dbo下面搜索,影响性能。而且如果你的表是csdn.TestTable的话,那么select * from TestTable会直接报找不到表的错误。所以写上具体的Schema也是一个好习惯。
3.自定义存储过程不要以sp_开头
因为以sp_开头的存储过程默认为系统存储过程,所以首先会去master库中找,然后在当前数据库找。建议使用USP_或者其他标识开头。
4.使用sp_executesql替代exec
原因在Inside Microsoft SQL Server 2005 T-SQL Programming书中的第四章Dynamic SQL里面有具体描述。这里只是简单说明一下:sp_executesql可以使用参数化,从而可以重用执行计划。exec就是纯拼SQL语句。
5.少使用游标
可以参考Inside Microsoft SQL Server 2005 T-SQL Programming书中的第三章Cursors里面有具体描述。总体来说,SQL是个集合语言,对于集合运算具有较高的性能,而Cursors是过程运算。比如对一个100万行的数据进行查询,游标需要读表100万次,而不使用游标只需要少量几次读取。
6.事务越短越好
SQL Server支持并发操作。如果事务过多过长,或是隔离级别过高,都会造成并发操作的阻塞,死锁。此时现象是查询极慢,同时cup占用率极低。
7.使用try-catch来处理错误异常
SQL Server 2005及以上版本提供对try-catch的支持,语法为:
----your code
begin catch
--error dispose
一般情况可以将try-catch同事务结合在一起使用。
begin tran
--…………
begin catch
--if error
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有用存储过程更新30万条数据,用了7个小时,有没有更好的方法 - 开源中国社区
当前访客身份:游客 [
当前位置:
CREATE OR REPLACE
PROCEDURE P_REPORT_CUST_VALID IS
RETAIL_NUM NUMBER ;
ENGINEER_NUM NUMBER ;
NUM NUMBER ;
CUSTOMER_INFO_ID NUMBER ;
J NUMBER ;
CURSOR SHOP_NUM IS SELECT * FROM CUST_SHOP_INFO_DETAIL ;
FOR C_SHOP_NUM IN SHOP_NUM LOOP
J := J + 1 ;
nvl(SUM(C.RETAIL_NUM),0)
r INTO RETAIL_NUM
PSI_SALES_C C
C.CUST_SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID
AND TO_CHAR (
C.CREATED_DATE,
'yyyy-MM-dd'
) &= TO_CHAR (
ADD_MONTHS (SYSDATE ,- 3),
'yyyy-MM-dd'
nvl(SUM(C.ENGINEER_NUM),0)
E INTO ENGINEER_NUM
PSI_SALES_C C
C.CUST_SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID
AND TO_CHAR (
C.CREATED_DATE,
'yyyy-MM-dd'
) &= TO_CHAR (
ADD_MONTHS (SYSDATE ,- 3),
'yyyy-MM-dd'
nvl(b.CUSTOMER_INFO_ID,0) sd INTO CUSTOMER_INFO_ID
CUST_SHOP_INFO b
b.SHOP_INFO_ID = (
A .SHOP_ID
CUST_SHOP_INFO_DETAIL A
A .SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID
NVL (SUM(D .NUM), 0) INTO NUM
PSI_SALES_B D
D .FH_CUSTOMER_ID = CUSTOMER_INFO_ID
AND TO_CHAR (
D .CREATED_DATE,
'yyyy-MM-dd'
) &= TO_CHAR (
ADD_MONTHS (SYSDATE ,- 3),
'yyyy-MM-dd'
RETAIL_NUM = 0
AND ENGINEER_NUM = 0
AND NUM = 0
UPDATE CUST_SHOP_INFO_DETAIL csid
SET CSID.IS_VALID = '1'
CSID.SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID ;
UPDATE CUST_SHOP_INFO_DETAIL csid
SET CSID.IS_VALID = '0'
CSID.SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID ;
END LOOP ;
END P_REPORT_CUST_VALID ;
更新1000条数据大概三分钟,该怎么修改?
共有13个答案
<span class="a_vote_num" id="a_vote_num_
有没有大神,会的
<span class="a_vote_num" id="a_vote_num_
CURSOR SHOP_NUM IS SELECT * FROM CUST_SHOP_INFO_DETAIL ; 这个语句有问题, 你这样是全部一次性加载所有数据,不够效率,你可以使用分页,或者循环查询,你先试试只查询 200条一次,然后循环更新耗时多久,都可以打印日志
--- 共有 1 条评论 ---
怎么循环查询?不太懂
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
分页批量更新数据提交事务。没有必要使用&RETAIL_NUM 这些中间变量,大概看了下,这些都可以作为最外层&CURSOR SHOP_NUM IS SELECT * FROM CUST_SHOP_INFO_DETAIL 的筛选条件。如果日期列是日期类型不是varchar类型,最好不要使用to_char转换成字符串比较,直接使用日期类型进行比较。你可以大概介绍下主要逻辑,其他人理解起来方便些。
--- 共有 2 条评论 ---
: 用一个变量记录处理了多少条数据,每 100(可以根据实际处理速度进行调整) 条提交事务。
(6个月前)&nbsp&
如何分页提交事物?
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
游标SHOP_NUM只用了SHOP_DETAIL_ID字段,那就只查询这一个字段就行了
LOOP中的前两条查询语句是对同一张表操作的,写到一起
where .. and .. 比较and连接的两部分哪部分查询起来快,快的放前面
比较日期不要to_char
<span class="a_vote_num" id="a_vote_num_
我就不说别的。
&&&&&&&&C.CREATED_DATE,
&&&&&&&&'yyyy-MM-dd'
&&&&) &= TO_CHAR (
&&&&&&&&ADD_MONTHS (SYSDATE ,- 3),
&&&&&&&&'yyyy-MM-dd'
这个SQL效率得有多糟糕。而且你需要把所有的记录都走一遍游标再判断吗?这么多全表扫描,真是要死人了。
<span class="a_vote_num" id="a_vote_num_
你应该把业务需求和场景说清楚吧, 各个表之间的关系,还有数据量多少等。
你用写程序的思维去写SQL,用游标去循环30万次,性能肯定上不去。
--- 共有 1 条评论 ---
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
一条SQL就可以解决的事,非要用游标去处理。就算你游标里的SQL执行效率再高,循环30万次也要慢得跟蜗牛一样
--- 共有 1 条评论 ---
对每条数据进行计算,如何用一条sql写出来?
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
CREATE OR REPLACE
PROCEDURE P_REPORT_CUST_VALID IS
RETAIL_NUM NUMBER ;
ENGINEER_NUM NUMBER ;
NUM NUMBER ;
CUSTOMER_INFO_ID NUMBER ;
J NUMBER ;
CURSOR SHOP_NUM IS SELECT CS.SHOP_DETAIL_ID FROM CUST_SHOP_INFO_DETAIL
FOR C_SHOP_NUM IN SHOP_NUM LOOP
J := J + 1 ;
--计算零售量
nvl(SUM(C.RETAIL_NUM),0)
r INTO RETAIL_NUM
PSI_SALES_C C
C.CUST_SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID
C.CREATED_DATE &= ADD_MONTHS (SYSDATE ,- 3);
--计算工程量
nvl(SUM(C.ENGINEER_NUM),0)
E INTO ENGINEER_NUM
PSI_SALES_C C
C.CUST_SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID
AND C.CREATED_DATE &= ADD_MONTHS (SYSDATE ,- 3);
--计算批发量
nvl(b.CUSTOMER_INFO_ID,0) sd INTO CUSTOMER_INFO_ID
CUST_SHOP_INFO b
b.SHOP_INFO_ID = (
A .SHOP_ID
CUST_SHOP_INFO_DETAIL A
A .SHOP_DETAIL_ID = C_SHOP_NUM.SHOP_DETAIL_ID
NVL (SUM(D .NUM), 0) INTO NUM
PSI_SALES_B D
D .FH_CUSTOMER_ID = CUSTOMER_INFO_ID
D .CREATED_DATE
ADD_MONTHS (SYSDATE ,- 3) ;
RETAIL_NUM = 0
AND ENGINEER_NUM = 0
--AND NUM = 0
INSERT INTO CUST_VALID(CUST_SHOP_D_ID,IS_VALID)VALUES(C_SHOP_NUM.SHOP_DETAIL_ID,'1');
INSERT INTO CUST_VALID(CUST_SHOP_D_ID,IS_VALID)VALUES(C_SHOP_NUM.SHOP_DETAIL_ID,'0');
END LOOP ;
END P_REPORT_CUST_VALID ;
我这个场景是 &有一个表CUST_SHOP_INFO_DETAIL&大概30万条数据,根据需求,我要每一条都要判断是否有效,而计算是否有效,就要查询PSI_SALES_C 和 PSI_SALES_B&对应的数据进行判断,我通过测试,就是在查询PSI_SALES_B&这个表的时候,速度立马降下来了,我把它注释掉,时间只用0.68秒,如果加上注释的部分,大概一分钟,不过PSI_SALES_C 大概1600万条数据,而PSI_SALES_B&大概仅300万条数据。
--- 共有 1 条评论 ---
我把更新变为新插入到一个表中
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
把游标改一下,存储过程中出现游标是个大问题,你可以在游标的地方加上:
v_begintime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
& // 你的逻辑sql
v_endtime:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
试试就出来了,哪里比较耗时
<span class="a_vote_num" id="a_vote_num_
不去学习使用查询计划分析性能,使用统计信息分析性能,帮你解决再多这样的问题都是白搭。
更多开发者职位上
有什么技术问题吗?
开源中国...的其它问题
类似的话题2013年4月 Oracle大版内专家分月排行榜第二2013年3月 Oracle大版内专家分月排行榜第二2010年5月 Oracle大版内专家分月排行榜第二
2013年1月 Oracle大版内专家分月排行榜第三2011年12月 Oracle大版内专家分月排行榜第三2010年8月 Oracle大版内专家分月排行榜第三2010年4月 Oracle大版内专家分月排行榜第三2010年3月 Oracle大版内专家分月排行榜第三
2013年4月 Oracle大版内专家分月排行榜第二2013年3月 Oracle大版内专家分月排行榜第二2010年5月 Oracle大版内专家分月排行榜第二
2013年1月 Oracle大版内专家分月排行榜第三2011年12月 Oracle大版内专家分月排行榜第三2010年8月 Oracle大版内专家分月排行榜第三2010年4月 Oracle大版内专家分月排行榜第三2010年3月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 win7黑屏解决办法 的文章

 

随机推荐