数据库操作有多慢

   “数据库操作很慢”,“尽量避免数据库操作”这些话已经早已深入我心,但可笑的是从未实验过。现在恰巧哟这么个机会,简单的实验一下吧

 

    现在有一张表,有25字段,只有ID有索引(主键),该表存储了20488条数据,导出的sql有11.1M。

 

    项目中的是struts2+spring+ibatis,赖的费事,就直接在service中以并发1的情况下比较了一下速度(耗时)。

 

 

实验1

 

查询1:利用"where 1 = 1 and  P_ID=?   "去查询(其中P_ID没有索引)

测试结果:直接查询数据库用时47ms(32,699,268ns),获取数据89条。

 

 

 

 

查询2:

a.首先把2万条数据都查出来放到ArrayList中(不计算在时间内)

b.for循环ArrayList并对比P_ID

测试结果:FOR循环 20488条数据用时0ms(7,086,888ns),获取数据89条。(呵呵,(System.currentTimeMillis() - start)已经满足不了我们的需求了)

 

 

实验1结果:

此种情况下查询2比查询1快了(32,699,268/7,086,888)=4.6倍。

 

 

 

 

 

实验2

 

查询1:利用"where 1 = 1 and  ID=?   "去查询(其中ID是主键

查询1测试结果:直接查询数据库用时11,589,130ns,获取数据1条。

 

查询2:仍旧采用遍历ArrayList,对比ID方式

查询2测试结果:for循环 20,488条数据用时2,456,200ns,获取数据1条。

 

 

实验2结果:

此种情况下查询2比查询1快了( 11,589,130 /  2,456,200)=4.7倍。

 

 

 

结论:

1.for循环方式比直接查找数据库快了4.5倍以上,与是否有主键差别不大。

 

疑问:

1.“查询2测试结果”和“查询2测试结果”同时:for循环 20488次,但耗时尽然差了(7086888/2456200)=2.8853057568601908倍,很是不解。即使去除for中间的tempList.add(o);也是如此。

很奇怪啊if (o.getID().equals(pid))明显快于if (o.getP_ID().equals(pid))。


 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值