我看了简朝阳的一本《mysql性能优化》中提到重复执行相同的SQL会造成资源浪费?
我对此很不能理解?上次执行的sql返回的结果集不是会在mysql server的缓存里面么,
这样执行相同的查询不是很快就得到结果了么?(不需要query优化器去选择执行计划,直接从缓存中读取)
怎么会造成资源浪费呢?
请谈谈你们的理解?谢谢

解决方案 »

  1.   

    7、重复执行相同的SQL 造成资源浪费  上面还仅仅只是列举了我们平时比较常见的一些实现差异对性能所带来的影响,除了这些实现方面所带来的问题之外,应用系统的整体架构实现设计对系统性能的影响可能会更严重。下面大概列举了一些较为常见的架构设计实现不当带来的性能问题和资源浪费情况。
    1、Cache 系统的不合理利用导致Cache 命中率低下造成数据库访问量的增加,同时也浪费了Cache系统的硬件资源投入;
    2、过度依赖面向对象思想,对系统
    3、对可扩展性的过渡追求,促使系统设计的时候将对象拆得过于离散,造成系统中大量的复杂Join语句,而MySQL Server 在各数据库系统中的主要优势在于处理简单逻辑的查询,这与其锁定的机制也有较大关系;
    4、对数据库的过渡依赖,将大量更适合存放于文件系统中的数据存入了数据库中,造成数据库资源的浪费,影响到系统的整体性能,如各种日志信息;
    5、过度理想化系统的用户体验,使大量非核心业务消耗过多的资源,如大量不需要实时更新的数据做了实时统计计算。
      

  2.   

    由于有特殊字符,@@@您的回复正文中有非法词或词组!@@@
    贴不出来,只能给个链接了。。
    http://blog.csdn.net/MONKEY_D_MENG/archive/2010/07/30/5777572.aspx
    第五点中提到重复query问题
      

  3.   


    根据这个的意思,它所指的 “相同的SQL ” ,应该是 select * from table1 where gid=100;select * from table1 where gid=101;select * from table1 where gid=102;....它给出的建议是 select * from table1 inner join table2 ...一次性把结果集拿到。至少说效率上的好坏,要看具体情况。
      

  4.   

    就是节约通讯开销吧。第一次select * from a where colb=102;返回一个结果集,以后需要这个结果集的时候,就不要再去查数据库了,直接从这取。不过我认为现在的网络成本越来越低,有些以前由于硬件环境导致的问题现在可以忽略掉了。当带宽在128K的时候需要考虑的问题,在带宽为20G的时候,就完全可以忽略掉。