我是新手,接触PHP的时间不长,现在要处理的问题是:我有一个系统,里面的品数据有1000多个,每次显示产品列表时,都会花很长时间,浏览器一直在加载那个页面。我有采取分页显示。类似的情况还有采购订单的显示,这个的话就有好几个表联合查询的,所以时间更慢了。请问各位大侠有没有什么好的建议

解决方案 »

  1.   

    我刚刚查了一下代码,是每次都返回所有记录,然后再用array_slice函数截取分页的数据。
      

  2.   

    把sql打印出来,到mysql分析一下。
      

  3.   

    我刚刚查看了一下代码,是返回所有数据,然后再用array_slice函数截取数据。这个也会影响读取数据的原因之一是吧
      

  4.   

    自己用Explain分析你的sql语句,加上show profiles信息可以更详细些。
      

  5.   

    那这样就不太好了,肯定是一次读1000了,看怎么优化成sql才行。一次读1000有些多。
      

  6.   

    这样肯定是不好的,数据再多就会爆内存了,查询数据的时候用limit分页吧。
      

  7.   

    $rs = $objWebInit->db->query("SELECT com_cn_stock.stockNum,com_cn_supply.syShortName,com_cn_user.real_name,com_cn_stock.Quantity,com_cn_stock.amount,com_cn_stock.submit_date,com_cn_stock.state,com_cn_stock.shengorder,com_cn_product.Title_CN,com_cn_stock.orderType" .
    " FROM com_cn_stock" .
    " LEFT JOIN com_cn_stock_detail ON com_cn_stock.stockNum = com_cn_stock_detail.stockNum" .
    " LEFT JOIN com_cn_product ON com_cn_stock_detail.itemNum = com_cn_product.ItemNum" .
    " JOIN com_cn_supply ON com_cn_stock.syNum = com_cn_supply.syNum" .
    " JOIN com_cn_user ON com_cn_stock.usernum = com_cn_user.usernum ".$strWhere.' group by com_cn_stock.stockNum'.$strOrder);//执行SQL语句
    $arrInfo = $rs->fetchAll();//返回结果
    $arrData = array_slice($arrInfo,($_GET['page']-1)*$arrGPage['page_size'],$arrGPage['page_size']);//截取当页显示的数组
      

  8.   

    太丧尸了...
    读取那么多数据... 幸好你只有1000条数据...
    还是直接使用 limit 分页吧.
    $p = 1;
    $_GET['p']&&$p = $_GET['p'];//第几页
    $pagenum = 20;//每页20数据select title form test limit $p-1*20,$p*20;// 获取当前页的起始 至 当前页的结束位置数据。
      

  9.   


    业务要求是要读取这些表的数据。我加了LIMIT,还是很慢。
    我把LIMIT 加在最后。但是我觉得这样没起多在作用。可能我加的位置不对吧。请帮忙指点一下
      

  10.   

    做索引优化吧。LEFT JOIN  关联之间 做索引
      

  11.   

    用limit 分页 1000条不到一秒
      

  12.   

    我现在只查询上个月第一天开始的数据,limit加在group by 后面,好像还是很慢。我也有建索引。
    SELECT com_cn_stock.stockNum,com_cn_supply.syShortName,com_cn_user.real_name,com_cn_stock.Quantity,com_cn_stock.amount,com_cn_stock.submit_date,com_cn_stock.state,com_cn_stock.shengorder,com_cn_product.Title_CN,com_cn_stock.orderType FROM com_cn_stoc
     JOIN com_cn_stock_detail ON com_cn_stock.stockNum = com_cn_stock_detail.stockNum 
     JOIN com_cn_product ON com_cn_stock_detail.itemNum = com_cn_product.ItemNum
     JOIN com_cn_supply ON com_cn_stock.syNum = com_cn_supply.syNum
     JOIN com_cn_user ON com_cn_stock.usernum = com_cn_user.usernum where com_cn_stock.state<3 and com_cn_stock.submit_date <='2012-05-01' group by com_cn_stock.stockNum limit 100,ORDER BY com_cn_stock.stockNum DESC
      

  13.   

    对于复杂的查询表达式请执行 EXPLAIN 语句,他会给你有益的建议
    自己瞎猜是不行的,随意减少关联的表可能导致查询结果不准确
      

  14.   

    我用这个EXPLAIN语句分析,确实能找到不少原因。我用了LEFT JOIN 效率就慢了很多。改为JOIN,就可以了。还要再分析清楚。