$sql = "SELECT * FROM `shops` WHERE `subdomain` != '' ORDER BY RAND() LIMIT 100";我现在执行这句sql查询 是不是要在mysql里面进行运算随机?
我用sinaapp的  结果mysql  cpu很耗  要钱..
我把这句删除以后,cpu就正常了
但是我还想用这句的功能,有什么办法吗?
我听说一个人说可以用脚本进行随机,不在mysql随机,那是不是一样会耗很多cpu

解决方案 »

  1.   

    我认为瓶颈出在  WHERE `subdomain` != ''  而不是 ORDER BY RAND() 估计shops数据量太大了。不过你说的CPU很耗我还是想不通,时间长很可能是磁盘I/O的问题解决方案除了做好该字段的索引外,你也可以考虑缓存查询结果到你的应用中,sina app不是说有memcached嘛?
      

  2.   


    我不懂做缓存,shops是有5万多记录
      

  3.   

    mysql手册里有明确的说明, ORDER BY RAND()是不能使用的, 这会引起多次查询. 随机抽取记录, 你可以预先生成一个字段, 这个字段都有自己的随机id, 然后在脚本生成一个id筛选字串, 通过数学方法, 保证这个筛选字串可以选出你想要的记录条数, 使用like即可.不过这个字段的如果保证每条都可以被选到, 需要你自己动点脑筋. 基本是数学问题.
      

  4.   

    ORDER BY RAND() 搞不明白,为什么需要这个,楼主直接desc看下你的sql$sql = "SELECT * FROM `shops` WHERE `subdomain` <> '' ORDER BY RAND() LIMIT 100";
      

  5.   

    两个条件都是效率低下的条件。
    可以先将其中一个去掉,看那个效率更低下。可以把rand()去掉,看看 !=''的数据有多少。rand()可以在php中实现也行。
      

  6.   

    我也正想解决这个随机问题呢,倾向PHP算随机偏移量