互联网服务sql优化

如何优化增、删、改SQL的执行效率?

洪烨老师,如何优化增、删、改SQL的执行效率?向您请教。
参与7

5同行回答

欧阳峰欧阳峰其它Freelancer
1. 大多数dml(insert,update,delete)操作都是根据条件来做的,因此考虑效率必须根据条件字段建立合理的索引,尤其在有关联表情况的时候还要考虑外键索引等2. dml操作都会产生日志,因此合理规划log与io磁盘的规划划分3. dml语句会产生锁,因此需要配置好与锁相关的参数...显示全部
1. 大多数dml(insert,update,delete)操作都是根据条件来做的,因此考虑效率必须根据条件字段建立合理的索引,尤其在有关联表情况的时候还要考虑外键索引等
2. dml操作都会产生日志,因此合理规划log与io磁盘的规划划分
3. dml语句会产生锁,因此需要配置好与锁相关的参数收起
IT其它 · 2013-10-31
浏览540
finixfinix数据库架构师中国银行
插入可以考虑先插入到缓存区,再复合插入.update比较复杂,在update背后其实隐藏着潜在的约束关系:定义用于更新其他数据集的数据为源数据,被更新的数据称为目标数据,原数据集合与目标数据之间的关联键,在源数据集中一定唯一。不会存在着目标数据一次更新过程中被更新2次。upd...显示全部
插入可以考虑先插入到缓存区,再复合插入.

update比较复杂,在update背后其实隐藏着潜在的约束关系:定义用于更新其他数据集的数据为源数据,被更新的数据称为目标数据,原数据集合与目标数据之间的关联键,在源数据集中一定唯一。不会存在着目标数据一次更新过程中被更新2次。
update可能出现更新丢失这种比较隐蔽的错误
错误:
update test1
set test1.name=(select test2.name from test2 where test1.id=test2.id)
正确:
update test1
set test1.name=(select test2.name from test2 where test1.id=test2.id)
where test1.id in (select id from test2);
还可以可以用mege语句来避免更新丢失:
merge into test1
using test2
on (test1.id=test2.id)
when matched then
   update set test1.name=test2.name;
在oracle里面还可以写成更新可更新视图的方法

delete语句产生的重做日志量比较大,在删除比较多的时候,可以考虑把delete语句转化为insert语句
这样产生的日志量会少些

此外考虑到增删改与索引复杂的关系,这里面也有很多收起
政府机关 · 2014-05-26
浏览525
hulun1987hulun1987软件开发工程师招商银行广州分行
我说一个吧,在编码时,其实在业务逻辑允许的情况下,可以考虑分批执行。事务太大执行效率就会下降,我之前试过一个插入500万记录,要20多分钟,同样环境下,把代码改为分批,只要5分钟不到。...显示全部
我说一个吧,在编码时,其实在业务逻辑允许的情况下,可以考虑分批执行。事务太大执行效率就会下降,我之前试过一个插入500万记录,要20多分钟,同样环境下,把代码改为分批,只要5分钟不到。收起
银行 · 2014-05-26
浏览504
db2china2db2china2技术经理DB2咨询服务
回复 2# 欧阳峰 考虑得很全面呀显示全部
回复 2# 欧阳峰
考虑得很全面呀收起
IT咨询服务 · 2014-05-25
浏览503
hongyehongyehongyehongye数据库管理员哈尔滨银行
与查询语句相比,增、删、改SQL的区别在日志文件的I/O上,优化方向也应该对日志文件IO进行特别关注显示全部
与查询语句相比,增、删、改SQL的区别在日志文件的I/O上,优化方向也应该对日志文件IO进行特别关注收起
银行 · 2013-11-01
浏览488

提问者

db2_worldlove
数据库管理员zcgx

相关问题

相关资料

问题状态

  • 发布时间:2013-10-31
  • 关注会员:1 人
  • 问题浏览:4393
  • 最近回答:2014-05-26
  • X社区推广