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

2022-07-24 11:28:30

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

select *from Awhere b_idin 
(select idfrom Bwhere c_idin 
(select idfrom Cwhere d_idin
(select idfrom Dwhere e_id=8)
));

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

select *from Awhere b_id=7;

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

  • 作者:郝国生
  • 原文链接:https://blog.csdn.net/good0981/article/details/53363074
    更新时间:2022-07-24 11:28:30