数据库操作中读操作比写操作慢的原因及解决

一个现象:使用derby数据库时,用java编程把数据写入,每组数据写入时间平均是2小时;然后用查询语句读每组数据,全部读出来的时间平均是20小时。
这与我们的常识相违背。我们的常识是:读数据比写数据快,而不是慢。而这一现象与此正好相反。
分析原因:首先使用的查询语句是:

select * from A where b_id in 
(select id from B where c_id in 
(select id from C where d_id in
(select id from D where e_id=8)
));

观察该查询语句,猜测查询较慢可能是由于select嵌套较多导致的,其原因可能是每次在A中读一条数据时,都要执行后面所嵌套的select!这样做的原因是后续select结果可能会动态变化!
解决:把后续的select的结果求得,而不使用select嵌套,即改为如下语句:

select * from A where b_id=7;

结果:查询时间变为40分钟,效率比采用select嵌套提高了20*60/40=30倍!
结论:在查询语句中使用确定的值,比使用嵌套要快提多。能够不使用select嵌套就不要使用。数据库的设计者们可能出于对数据动态变化的考虑,在对每行记录处理时,会对select嵌套执行一次,这也许是数据库读比写要慢的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值