前提:所有用户头像图片以二进制数据形式存于数据库中,所以图片输出是PHP输出图片形式(不要问为什么把图片存进数据库)。
目前:页面是用户头像列表页面,要把用户头像一一显示出来。比如:
<div><img src="img.php?title=A" /></div><div><img src="img.php?title=B" /></div><div><img src="img.php?title=C" /></div>……
其中img.php从数据库中来读取A、B、C或其它用户的头像图片并显示。
问题:我想知道,有什么方法来进行优化这种同时多个频繁MYSQL数据库读取?比如如何“保持数据库持久连接”,等img.php?title=…… 一一执行完之后再关闭。
——上面的意思,大家能明白吧。

解决方案 »

  1.   

    是的我想问为什么要把图片存数据库,mysql官方也并不建议这样做。
    就你的想法,数据库长连接对克服瓶颈并没有多大帮助,问题在于I/O及内存消耗上,如果写代码的人不去注意,所耗费的内存就会是这张图片本身大小的数倍
      

  2.   

    在你示例的代码中,img.php 被独立的执行了 3 次
    注意这不是在一次 img.php 中访问了 3 次数据库
    因此并没有优化的空间!这不是是否把图片数据放在数据库中的问题
    因为数据库中只保存图片名时,数据库查询一样是必须的
      

  3.   

    查数据库少不了,区别是echo一段字节(占内存)还是location到一个文件管理的问题视乎管理模块,整条记录增删改确实比较方便,但数据库用得最多不是增删改而是查
      

  4.   

    存图片名字好多吧,关联一次都取得图片路径就完事了
    存数据库跑php又跑mysql,非得存数据库那就做些数据缓存处理吧……,不要频繁查数据库,用户更新头像再更新缓存文件。
      

  5.   

    还本用一句sql,现在用三个,还多出三次tcp连接。量大时,这个备份得做多少无用功!
      

  6.   

    建议把图片生成出来这样子会比较好。当然,你这样读取其实也没有什么影响,我觉得!就算是直接访问图片地址,其实也是进行了IO操作,你放数据库也一样要IO操作。
      

  7.   

    单从img.php看,并没有频繁请求数据库。
    而从整个页面看,则的确有这个现象。
    不把图片从数据库里解脱出来,无解。
      

  8.   

    你可以用缓存啊,memcached 或者只能重构了