Recently in PHP Category
分页是数据库系统中,尤其是网页中常见的功能。数量级在一万以下时,分页的性能问题觉察不出来;当在数量在一万到100万之间时,有点担心性能问题;当数量过百万时,分页性能是必须考虑的问题了。 传统方案: 索引 索引可以明显提高索引性能,自然索引可以提高分页性能。但是即使一个简单的表,每页10条,当查看1000页时,估计性能已经不能让人满意了。如何优化? /********************** 补充一点: 当你的查询是比较复杂时,索引是不是恰当也是值得注意的地方。如果你知道联合索引是怎么回事,什么地方使用,那么你可以略过此段。以下面的SQL为例: SELECT * FROM TABLEA WHERE F1 = 'value' AND F2 = 'value' 如果只是针对F1, F2单独建了索引,而没有建联合索引,则当分别符合F1, F2条件的两个记录集中数量最小某的仍然很大时,速度就不理想了。这是因为使用F1索引,但是F2的索引没有用上劲;或者,反之。如果优化索引呢,得建(F1,F2)的联合索引,这样上面的SQL语句就很快了。 ***********************/ 一点小技巧: 使用联合索引后,前几百页很快了。但是越往后,速度越慢;现在咱们使用一个技巧,最后几页,肯定是使用倒序的第一页,以此类推。 这样,分页的最后和最后都很快了。也许各位要较真了,正序和倒序的重合部分怎么办?几条记录即出现在第N页上,又出现在N+1页上,怎么办?其实这个问题不大,想一想,这个技巧只有当页码超过某个数量级之后才会应用。那时,已经无人会注意这些细节了。 大大的技巧: 联合索引可以极大提高搜索速度,能不能把分页转换成条件检索呢,换句话说,SQL始终在执行某一条件的LIMIT 10。当然可以了,我们分页时基本上按照自动编号的ID进行排序(一定意义上等同于按照时间排序)。如果每次翻页时,把当前页的最后一个ID传过去,构建SQL语句时,除了应用之前的检索条件,再加上ID范围限制,这样下一页呈现时,只需要搜索前几条就可以了。SQL语句部分不存在分页的问题了。比如构建后的SQL可能是这样的: SELECT * FROM TABLEA WHERE F1 = 'value' AND F2...
今天看到一篇文章(升级PHP5的理由:PHP4和PHP5性能对比),竟然说在php5中使用类编程要比使用过程快。十分不相信,于是测试了一下,测试例子同样适用原文的例子: 1. 采用过程编写: function <?phpfunction signin(){ echo "test";}signin();?> 测试使用apache自带的工具 ab, 参数如下:./ab -c 50 -n 1000 http://127.0.0.1/test.php 测试结果: This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Copyright 2006 The Apache Software Foundation,...
本篇文章转自〈部署 PHP 系列,第 3 部分: 加速用于 Oracle 的 PHP 代码运行速度〉。文中提及的Oracle HTTP 服务器 实际上就是apache,所以本文也普遍适用于apache。本文虽然写于2005年8月2日,但很多东西是适用的。文章从各个方面阐述了apache,php,network,tcp的优化,在同类文章中很难见,是篇难得的好文章,值得细细品读。
Continue reading 调优,提升 PHP 代码性能.
1. http://spyc.sourceforge.net/ YAML的解释器,可以根据yaml文件返回数组。 2. http://fabien.openesub.org/cgi-bin/trac_wrapper/wiki/embedded_cache_lite 一个脱离pear的,"嵌入式"的缓存类。 3. http://phpmailer.sourceforge.net/ 专业的email发送类库,支持很多功能。 4. http://phputf8.sourceforge.net/ 对utf8的处理,比如检测并清除坏了的utf8片断等等。 ...