淘宝店铺首页宝贝链接最下端的查看所有宝贝,为什么我的没有显示,别人的有。是怎么设置的?

查看: 4515|回复: 9
执行一个insert all和执行多个insert的效率对比问题?
论坛徽章:5
本帖最后由 beanslee 于
20:40 编辑
如题。假定对超过千万级的表做全表扫描运算。
方法一:(重复执行多变)
insert xxx&&select c2 from t1@dblink_1 where c1='1';
insert xxx&&select c2 from t1@dblink_1 where c1='2';
insert xxx&&select c2 from t1@dblink_1 where c1='3';
insert all
when c1='1' then into xxx values(c2)
when c1='2' then into xxx values(c2)
when c1='3' then into xxx values(c2)
select c2 from t1@dblink_1;
示例中t1为1个单表,实际还有可能多个表关联检索,但都是远端库
大家认为哪个效率更高?
论坛徽章:66
论坛徽章:5
本帖最后由 beanslee 于
21:14 编辑
需求就是这样,要么把同表不同条件的sql执行多次,要么就insert all
我的问题是相对执行多遍,insert all是否会稍微好点?
论坛徽章:66
只要用dblink都不会好
论坛徽章:5
嗯。那是。
主要是相对而言,这两种方法,大家觉得那个更好
论坛徽章:2
本帖最后由 守望天山 于
17:48 编辑
第二个好些,因为只访问一次 ,具体有多大收益你试试
论坛徽章:5
目前测试的来看,all的方式会快一点。但随着case的增多和判断条件的增加,性能会变差
求职 : 认证徽章论坛徽章:33
表在远端机器,通过DBLINK对表做全表扫描,那种方式效率都不会很高。
论坛徽章:5
这不是两个相对比较么......
效率不高那是必然的了.....
论坛徽章:1
个人感觉是第二个效率高些,毕竟只有1次查询,case 应该不是问题,因为你分多次查询每次走索引消耗的会更多。 另外我觉得如果你是全表插入或者说数据量巨大,我建议你用动态SQL,create table xxx as select * from t1@dblink 的形式来做,这样不记录每条的日志,效率要高很多很多。。。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号当前位置: →
→ 为何Oracle数据库Insert记录的速度越来越慢
为何Oracle数据库Insert记录的速度越来越慢
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: 求助:为何Oracle数据库Insert记录的速度越来越慢自己写了一个基于Oracle的数据入库存储的程序,实现对每幅影像数据进行分块后...
"为何Oracle数据库Insert记录的速度越来越慢"::
求助:为何oracleinsert记录的速度越来越慢自己写了一个基于oracle的数据入库存储的程序,实现对每幅影像数据进行分块后插入到指定的表中,其基本操作过程如下:begin transaction;insert into image values(值1,值2,值3,empty_blob());update image
set blob字段 =
新值 where ...;commit;开辟了三个线程来同时执行上述插入操作,对于一幅划分为25000块的影像插入的速度大概在90秒但是当连续插入超过大约15幅之后(每幅影像插入到单独的一个表中),单幅影像插入消耗的时间不断增大,一幅25000块的影像插入的时间上升到300多秒,不知是何缘故,小弟刚开始接触,望路过的各位大侠帮忙指点一二,是否有什么参数需要调整?每插入一个数据块都执行了一次commit操作,每个新开辟的线程都是对应着一个新的连接,线此文来自: 马开东博客
转载请注明出处 网址:
程执行完之后也通过close()、dispose()方式关闭了连接。后来又尝试将整个插入过程定义成的形式,却发现多线程下执行的效率还不如不使用的方式。------解决方案--------------------1、事务长度要合适;2、不要频繁提交(比如可插入1000行提交一次);3、查看一下cpu和io的状态,瓶颈在哪。
------解决方案--------------------这种情况估计是出现了等待写入日志组的现象。解决方法如下:1、不要频繁提交。2、有大对象的操作可以用nologging方式进行,如alter
insert/*+append */ into test ……;3、增加日志组个数,适当增大日志组尺寸(比较麻烦,可以不用)。
------解决方案--------------------关键在update image set blob字段 = 新值 where ...;极有可能是这个语句造成插入的时间越来越慢。当然,批量操作最好不要一个频繁commit。 搜索此文相关文章:Insert记录的速度越来越慢此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
为何Oracle数据库Insert记录的速度越来越慢_Oracle开发相关文章
Oracle开发_总排行榜
Oracle开发_最新
Oracle开发_月排行榜
Oracle开发_周排行榜
Oracle开发_日排行榜asp中用insert into语句向数据库插入记录(添加信息)的方法
字体:[ ] 类型:转载 时间:
asp中用insert into语句向数据库插入记录信息的方法,学习的朋友可以参考下。
一、'建立register.asp
代码如下: &%@ language=vbscript %& &html & &head& &title&注册页面&/title& &meta http-equiv="Content-Type" content="text/ charset=gb2312" /& &style type="text/css"& td img {display:}.STYLE2 {font-size: 12px} .STYLE3 { color: #FF0000; font-weight: font-size: 16 } &/style& &/head& &body bgcolor="#ffffff"& &table width="531" border="0" align="center" cellpadding="0" cellspacing="0"& &!--DWLayoutTable--& &!-- fwtable fwsrc="未命名" fwbase="register.jpg" fwstyle="Dreamweaver" fwdocid = "" fwnested="0" --& &tr& &td width="58" rowspan="5" valign="top" bgcolor="#D8FBB5"&&img src="spacer.gif" width="58" height="1" border="0" alt="" /&&img name="register_r1_c1" src="register_r1_c1.jpg" width="58" height="74" border="0" id="register_r1_c1" alt="" /&&img name="register_r2_c1" src="register_r2_c1.jpg" width="58" height="48" border="0" id="register_r2_c1" alt="" /&&img name="register_r3_c1" src="register_r3_c1.jpg" width="58" height="202" border="0" id="register_r3_c1" alt="" /&&img name="register_r6_c1" src="register_r6_c1.jpg" width="58" height="53" border="0" id="register_r6_c1" alt="" /&&/td& &td width="209" height="75" valign="top"&&img name="register_r1_c2" src="register_r1_c2.jpg" width="209" height="74" border="0" id="register_r1_c2" alt="" /&&/td& &td width="204" valign="top"&&img name="register_r1_c3" src="register_r1_c3.jpg" width="204" height="74" border="0" id="register_r1_c3" alt="" /&&/td& &td width="60" rowspan="5" valign="top" bgcolor="#D8FBB5"&&img src="spacer.gif" width="60" height="1" border="0" alt="" /&&img name="register_r1_c4" src="register_r1_c4.jpg" width="60" height="74" border="0" id="register_r1_c4" alt="" /&&img name="register_r2_c4" src="register_r2_c4.jpg" width="60" height="48" border="0" id="register_r2_c4" alt="" /&&img name="register_r3_c4" src="register_r3_c4.jpg" width="60" height="202" border="0" id="register_r3_c4" alt="" /&&img name="register_r6_c4" src="register_r6_c4.jpg" width="60" height="53" border="0" id="register_r6_c4" alt="" /&&/td& &/tr& &tr& &td height="50" colspan="2" valign="top"&&img name="register_r2_c2" src="register_r2_c2.jpg" width="413" height="48" border="0" id="register_r2_c2" alt="" /&&/td& &/tr& &tr& &td height="16"&&/td& &td&&/td& &/tr& &tr& &td height="42" colspan="2" valign="top" &&form id="form1" name="form1" method="post" action="result2.asp"& &table width="100%" border="1"& &tr& &td colspan="3"&&span class="STYLE2"&请在下面填写你的注册资料,红色&span class="STYLE3"&*&/span&所标示的选项为必填选项&/span&&/td& &/tr& &tr& &td align="center" valign="middle"&用户名:&/td& &td&&label& &input type="text" name="u_user" id="u_user" /& &/label&&/td& &td&&span class="STYLE2"&&span class="STYLE3"&*&/span&&/span&&/td& &/tr& &tr& &td align="center" valign="middle"&密码:&/td& &td&&label& &input type="text" name="u_pass" id="u_pass" /& &/label&&/td& &td&&span class="STYLE2"&&span class="STYLE3"&*&/span&&/span&&/td& &/tr& &tr& &td align="center" valign="middle"&姓名:&/td& &td&&label& &input type="text" name="i_name" id="i_name" /& &/label&&/td& &td&&span class="STYLE2"&&span class="STYLE3"&*&/span&&/span&&/td& &/tr& &tr& &td align="center" valign="middle"&性别:&/td& &td&&label& &select name="i_sex" size="1" id="i_sex"& &option value="1"&男&/option& &option value="2"&女&/option& &/select& &/label&&/td& &td&&span class="STYLE2"&&span class="STYLE3"&*&/span&&/span&&/td& &/tr& &tr& &td align="center" valign="middle"&年龄:&/td& &td&&label& &input type="text" name="i_age" id="i_age" /& &/label&&/td& &td&&span class="STYLE2"&&span class="STYLE3"&*&/span&&/span&&/td& &/tr& &tr& &td colspan="3" align="center" valign="middle"&&label& &input type="submit" name="button" id="button" value="提交注册资料" /& &&&&& &input type="reset" name="button2" id="button2" value="重置表单" /& &/label&&/td& &/tr& &/table& &/form&&/td& &/tr& &tr& &td colspan="2" valign="bottom" bgcolor="#D8FBB5" &&!--DWLayoutEmptyCell--&&&/td& &/tr& &/table& &/body& &/html&
二、建立连接并打开数据库的子程序con1.asp
代码如下: &% '字符串连接数据库的方法 set conn=server.createobject("adodb.connection") conn.Open "DRIVER=Driver do Microsoft Access (*.mdb);uid=pwd=;DBQ="&server.MapPath("regdb1.mdb") %&
三、建立ACCESS数据库db1.mdb,在其中建立数据表user,字段分别为:u_uid(自动),u_user(用户名:文本型),u_pass(密码:文本型) 四、建立接收register.asp中发送过来的表单数据,并插入到数据表user中的注册成功显示页面:result2.asp代码如下:
代码如下: &%@ language=vbscript %& &!-- #include file="con1.asp"--& &html & &head& &meta http-equiv="Content-Type" content="text/ charset=gb2312" /& &title&注册成功&/title&&br& &/head& &body& &% '建立recordset对象方法 set rst=server.createobject("adodb.recordset") set rst1=conn.execute("insert into user (u_user,u_pass) values('"&request.form("u_user")&"','"&request.form("u_pass")&"')") %& &table width="300" border="0" align="center"& &tr& &td align="center"&&img src="chenggong.jpg" alt="注册成功" width="297" height="201"&&/td& &/tr& &/table& &/body& &/html&
五、按F12预览register.asp并输入数据,点击提交按钮 这时打开数据表user会看到:说明操作成功,因为已经提交两次,所以我们看到表中插入了两条新的记录,但是表中出现了重复记录,以下在result2.asp中添加代码予以解决:
代码如下: &%@ language=vbscript %& &!-- #include file="con1.asp"--& &html & &head& &meta http-equiv="Content-Type" content="text/ charset=gb2312" /& &title&注册成功&/title& &style type="text/css"& &!-- .STYLE1 {font-size: 24px} --& &/style& &br&&/head&&body& &% '建立recordset对象方法 set rst=server.createobject("adodb.recordset") rst.open"select * from user where u_user='"&request.form("u_user") & "'",conn,1,1 if rst.recordcount&0 then response.write"用户名:"&request.form("u_user")&"已被占用,请点击返回重新注册" %& &a href="register.asp" class="STYLE1"&返回重新注册&/a& &% response.End else set rst1=conn.execute("insert into user (u_user,u_pass) values('"&request.form("u_user")&"','"&request.form("u_pass")&"')") end if %& &table width="300" border="0" align="center"& &tr& &td align="center"&&img src="chenggong.jpg" alt="注册成功" width="297" height="201"&&/td& &/tr& &tr& &td align="center"&&a href="register.asp" class="STYLE1"&返回&/a&&/td& &/tr& &/table& &/body& &/html&
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具8838人阅读
J2EE(63)
本文转自:
未作修改。
当插入一条记录时,我们很多时候都想马当前插入的主键返回出来.
别外.如果主键是自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事.
可能对于一些特殊的数据库必须把insert&into和select&max(key)或什么序列当前值作为一个事务的原子来操作,但很多数据库(以及数据库操作环境)并不能为你提供事务并发控制.所以如果多人同时操作,那么select&max(key)很可能就不是你刚才insert的那条记录.
在SQL server 很方便,有现程的sql可以用
INSERT&INTO&tableName&(fieldList&...)&values&(valueList&...)&SELECT&@@IDENTITY&AS&aliasN
在Oracle中,网上有多种方案,但是程序老是有问题。所以自己研究后,有两种方案:
1,&用JDBC的getGeneratedKeys,返回的是Oracle
的rowid.但是就是修改代码,比较麻烦,第一次返回rowid, 第二次再通过rowid再查一次数据库。
String sql = &insert into xx_cust(cust_type,cust_name,login_name)&
+ & values('ipn','aaa','bb')&;
Connection conn = DBConnectionManager.getConnection();
PreparedStatement sta = conn.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);
sta.execute();
System.out.println(sta.getGeneratedKeys());
ResultSet rest = sta.getGeneratedKeys();
rest.next();
String rowid=rest.getString(1);
System.out.println(&rowid=&+rowid);
PreparedStatement stat=conn.prepareStatement(&select cust_id from xx_cust where rowid=?&);
stat.setString(1, rowid);
ResultSet rest2 = stat.executeQuery();
rest2.next();
String custId=rest2.getString(1);
System.out.println(&custid=&+custId);
2,通过&用Oracle
的returning 语句
因为要用到oracle自己的API,所以如何用到像c3po等通用数据库连接池的话可以不能用。但是在数据库只连接一次。
代码如下:
Class.forName(&oracle.jdbc.driver.OracleDriver&).newInstance();
String url=&jdbc:oracle:thin:@192.168.3.95:1521:tdm&; //orcl为数据库的SID
String user=&pesup&;
String password=&pesup&;
Connection conn= DriverManager.getConnection(url,user,password);
String sql = &insert into xx_cust(cust_type,cust_name,login_name)&
+ & values('ipn','aaa','bb') returning cust_id into ?&;
OraclePreparedStatement sta = (OraclePreparedStatement) conn
.prepareStatement(sql);
sta.registerReturnParameter(1, OracleTypes.INTEGER);
int count = sta.executeUpdate();
if (count & 0) {
ResultSet rset = sta.getReturnResultSet();
while (rset.next()) {
String name = rset.getString(1);
System.out.println(&name=& + name);
----------------------------------------------------------------------------------------------
如何得到JDBC Insert 语句执行后插入Oracle 数据库记录的主键
在应用中,很多时候会对表的主键用一个自动增涨的数来付值,如Oracle的sequence,插入后又想得到的主键的值。下面介绍一下相关的方法。
1,用Oracle 的returning 语句。
PreparedStatement sta = conn.prepareStatement(&INSERT INTO LOGGING VALUES (TESTSEQ.NEXTVAL,SYSDATE)returning id into ? &);
sta.execute();
ResultSet rset = sta.getResultSet();
while(rset.next())
int id = rset.getInt(1);
2,用JDBC的getGeneratedKeys,返回的是Oracle 的rowid.
PreparedStatement sta = conn.prepareStatement(&INSERT INTO TESTTABLE VALUES (TESTSEQ.NEXTVAL,'aaaa')&,Statement.RETURN_GENERATED_KEYS);
sta.execute();
System.out.println(sta.getGeneratedKeys());
ResultSet rest = sta.getGeneratedKeys();
rest.next();
//oracle rowid
System.out.println(rest.getString(1));
--------------------------------------------------------------------------------------------
获取自动生成的键值,int id primary key auto_
Class.forName(&com.mysql.jdbc.Driver&);
Connection conn = DriverManager
.getConnection(&jdbc:mysql://localhost/BBS?user=root&password=root&);
//连接数据库
conn.setAutoCommit(false);
//不自动提交
String sql = &insert into article values (null,0,?,?,?,now(),0)&;
PreparedStatement pstat = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
//创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键,适合insert语句
//(该语句能自动生成键值)autoGeneratedKeys - 指示是否应该返回自动生成的键的标志
//它是 Statement.RETURN_GENERATED_KEYS 或 Statement.NO_GENERATED_KEYS 之一
Statement stat = conn.createStatement();
pstat.setInt(1, -1);
pstat.setString(2,title);
pstat.setString(3,content);
pstat.executeUpdate();
ResultSet rsKey = pstat.getGeneratedKeys();
//ResultSet 指示键值
rsKey.next();
int key = rsKey.getInt(1);
//得到第一个键值
rsKey.close();
stat.executeUpdate(&update article set rootid = & + key + & where id = & + key);
conn.setAutoCommit(true);
//设回自动提交
pstat.close();
conn.close();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:449578次
积分:5311
积分:5311
排名:第4832名
原创:104篇
转载:122篇
评论:29条
(1)(4)(3)(2)(23)(18)(3)(3)(15)(12)(1)(2)(1)(2)(1)(1)(4)(2)(2)(1)(1)(4)(6)(12)(6)(16)(16)(7)(5)(10)(14)(9)(2)(5)(1)(1)(3)(10)(1)(2)

我要回帖

更多关于 淘宝店铺首页宝贝展示 的文章

 

随机推荐