用户
 找回密码
 入住 CI 中国社区
搜索
楼主: cuiy6642
收起左侧

CI 访问数据库和 PHP 直接访问数据库速度差距达80倍?

[复制链接]
 楼主| 发表于 2008-11-10 21:53:03 | 显示全部楼层
附加说明:
我的测试环境:apache2 + php5 + MySQL 5.1 + Firebird2.1
 楼主| 发表于 2008-11-10 21:53:23 | 显示全部楼层
附加说明:
我的测试环境:apache2 + php5 + MySQL 5.1 + Firebird2.1
发表于 2008-11-11 06:41:05 | 显示全部楼层

PHP复制代码
foreach ($query->result() as $row)
复制代码

改为
PHP复制代码
$result = $query->result();
foreach ($result as $row)
复制代码


然后再试试看?
发表于 2008-11-11 06:42:27 | 显示全部楼层
 楼主| 发表于 2008-11-11 09:24:50 | 显示全部楼层
修改后结果如下,改善不大:
  1. connect time = 0.022449016571045
  2. query time = 0.036113977432251

  3. 9 京GTD670
  4. 10 京AC5259
  5. 11 京KQ3430
  6. 12 京HD9405
  7. 8 京GEB023
  8. 13 京LD3951
  9. 14 京FW8312
  10. 15 京JG4468
  11. 16 京GHV802
  12. 17 京GYA135
  13. 18 京GW0027
  14. 19 军A02139
  15. 20 京ER3268
  16. 21 京K44803
  17. 22 京J12111
  18. 23 京EX1420
  19. 24 京F81920
  20. 25 京FV8303
  21. 26 京AU3930
  22. 27 京LF6087
  23. loop time = 1.5624001026154
复制代码
 楼主| 发表于 2008-11-11 09:27:09 | 显示全部楼层
MySQL 修改后的结果如下,依然存在很大差距。
  1. connect time = 0.022861957550049
  2. query time = 0.027480125427246
  3. 1 0001 USER01
  4. 2 0002 USER02
  5. 3 0003 USER03
  6. 4 0004 USER04
  7. 5 0005 USER05
  8. 6 0006 USER06
  9. 7 0007 USER07
  10. 8 0008 USER08
  11. 9 0009 USER09
  12. 10 0010 USER10
  13. 11 0011 USER11
  14. 12 0012 USER12
  15. 13 0013 USER13
  16. 14 0014 USER14
  17. 15 0015 USER15
  18. 16 0016 USER16
  19. 17 0017 USER17
  20. 18 0018 USER18
  21. 19 0019 USER19
  22. 20 0020 USER20
  23. loop time = 0.027871131896973
复制代码
 楼主| 发表于 2008-11-11 09:29:31 | 显示全部楼层
用 PHP 直接访问 MySQL 最终耗时为:
loop time = 0.0035531520843506
还是相差了70多倍时间。
发表于 2008-11-11 10:00:54 | 显示全部楼层
多使用查询缓存技术。
发表于 2008-11-11 10:36:17 | 显示全部楼层
测试的时候最好每次都把mysql重启下,防止缓存.
 楼主| 发表于 2008-11-11 11:40:05 | 显示全部楼层
  1. 重启 MySQL 后
  2. 用 CI 访问:loop time = 0.12339091300964
  3. 再重启 MySQL 后
  4. 用 PHP 直接访问:loop time = 0.11537098884583
  5. 耗时接近。

  6. 再次重启 MySQL
  7. 用 PHP 直接访问:loop time = 0.091241836547852
  8. 然后用那个CI访问(没有重启MySQL):loop time = 0.033633947372437
  9. 再用CI访问:loop time = 0.029628992080688
  10. 再用CI访问:loop time = 0.029266119003296
  11. 再来一次CI:loop time = 0.02901291847229

  12. 改用PHP直接访问(没有重启MySQL):loop time = 0.016822099685669(这样看CI访问差距不大)
  13. 再用PHP:loop time = 0.0039198398590088
  14. 再用PHP:loop time = 0.0038449764251709
  15. 再用PHP: loop time = 0.0037660598754883

  16. 再用CI: loop time = 0.031005144119263
  17. 再用CI: loop time = 0.033904075622559
  18. 再用CI: loop time = 0.029873847961426
复制代码
看来应该是 PHP 直接访问数据库利用了缓存提高效率,而CI好像没有使用缓存(不应该这样呀?)

本版积分规则