大家一定要注意啊,不能对索引掉以轻心哦。最近我就在这个问题上吃亏吃大了。
有一条SQL: SELECT [Qudao].[NODE_ID] AS [Qudao__0], [Qudao].[PARENT_NODE_ID] AS [Qudao__1], [gQudao].[NODE_NAME] AS [Qudao__2] FROM [QUDAO] AS [Qudao] WHERE [PARENT_NODE_ID] = 0
这条SQL是由CakePHP产生的,如此一条简单的SQL的执行情况如下:Num rows : 1, Took (ms) :25625。很恐怖吧,也许有人会想这个表里的数据量一定很大吧,要不怎么话费了如此恐怖的25秒多?让人大跌眼镜的是这个表里只有区区的2000条数 据。也由于这个SQL的原因导致我页面慢的快不行了,我还一直以为是我程序出问题了,害我到处找问题。从来也没有意识到过是数据表索引的问题,以为这个表 的数据太少了,二强被查询的对比字段也是一个int型的,查询起来英爱是很快的。直到后来在调试其它地方的时候一不小心看到输出的SQL输出才知道问题在 这里!
在我的印象之中好像是索引在数据量很大,又或者是筛选字段是char类型的话才需要索引,又是想当然的经验主义害人啊!
加上索引之后速度唰一下上来了,这个SQL只花了几毫秒!
一开始我都不知道有这个问题,今天同事在MSN上告诉我我博客Feed有问题,我一看,蒙了,Feed怎么把CSS给调进来了?

我查了一下wp-feed代码,发现没有问题啊,真是怪了。实在没有办法了,来个硬盘文件搜索,哈哈,一下子找到罪魁祸首了。
最近郁闷的很,原因是Firefox出问题了,无法正确的载入CSS,CSS完全失效,让我无法测试很多东西。
查看CSS路径,完全是正确的,也是用的标准的<link rel="stylesheet" type="text/css" href="XXX" />的写法。但是在我公司的工作机器上老是有问题,页面看起来像是CSS完全失效了,而IE、Safari之类的则是完全正常,重装FF也是如此, 搞的我都快发疯了。
今天突然想到Apache也有MIME设置,是不是这个问题呢?然后我在配置文件里面一搜,终于发现问题所在了:N久以前的一个项目用的是动态生成的 CSS,所以将CSS后缀的请求用PHP解析响应了:AddType application/x-httpd-php .css。把这个去掉就可以了。
网上找了好久都没有CHM版的中文手册,索性自己编译了一份,有需要的就自己下咯.
下载地址: http://yakelie.com/wp-content/uploads/2009/02/CakePHP_Handbook_zh.CHM
最近一个项目是基于discuz的东西做二次开发,总所周知,Discuz的东西是那个猛啊,完全是面向过程的写法,不过效率超级高,完全是 PHP+MySQL的经典之作,但是......这个客户以前的系统用的是MSSQL,他要我们把Discuz从MySQL迁移到MSSQL,那个囧啊。
要知道俺已经不用MSSQL很多年了,印象中还停留在SQL Server2000上,现在是要重新学一下2005了。
鉴于这个迁移很有挑战性,我觉得很有必要把途中遇到的东西记录下来,并不断更新,方便自己和需要的同学用。
下面开始了:
一、数据库迁移规则
1. SQL Server不支持UTF-8,多国语言字段请使用unicode的nchar, nvarchar类型。
2. MySQL中的smallint值范围是0~65535,SQL Server中换用int值范围(-2,147,483,648)到(2,147,483,647)
3. MySQL中的mediumint值范围是0~16777215,SQL Server中换用int值范围(-2,147,483,648)到(2,147,483,647)
首先是建立一个新表,结构如下:
sess_id varchar(64) 存储 session id
sess_data text 存储 session 数据
activity int(11) 该 session 最后一次读取/写入时间
然后 修改应用程序设置 sessionProvider 为 FLEA_Session_Db。
在应用程序中就可以使用下面的代码查询在线人数。
$session_db = FLEA::getSingleton('FLEA_Session_Db');
echo '在线人数: ', $session_db->getOnlineCount();
getOnlineCount() 方法可以带一个 $lifetime 参数,指示最近多少秒之内有过活动的用户才算在线。如果不指定这个参数就按照服务器的 php.ini 设置来判断。所以用 getOnlineCount(60 * 5) 就可以知道最近5分钟的在线人数。
在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现。
第一,使用Header方法设置消息头Cache-control
PHP代码
- header('Cache-control: private, must-revalidate');
第二,使用session_cache_limiter方法
今天在判断一个表单穿过来的数字值,用了empty(),后来发现当值为0的时候empty()判断为true,我本意是判断这个值存不存在的。看来这几个函数不能乱用啊.....
在网上找到一个这几个函数的详细对比,贴一下:
Empty,NULL,UnSet 和 Flase的区别与比较
| Expression |
gettype() |
empty() |
is_null() |
isset() |
boolean : if($x) |
| $x = “”; |
string |
TRUE |
FALSE |
TRUE |
FALSE |
| $x = NULL |
NULL |
TRUE |
TRUE |
FALSE |
FALSE |
| var $x; |
NULL |
TRUE |
TRUE |
FALSE |
FALSE |
| $x is undefined |
NULL |
TRUE |
TRUE |
FALSE |
FALSE |
| $x = array(); |
array |
TRUE |
FALSE |
TRUE |
FALSE |
| $x = false; |
boolean |
TRUE |
FALSE |
TRUE |
FALSE |
| $x = true; |
boolean |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = 1; |
integer |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = 42; |
integer |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = 0; |
integer |
TRUE |
FALSE |
TRUE |
FALSE |
| $x = -1; |
integer |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = “1″; |
string |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = “0″; |
string |
TRUE |
FALSE |
TRUE |
FALSE |
| $x = “-1″; |
string |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = “php”; |
string |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = “true”; |
string |
FALSE |
FALSE |
TRUE |
TRUE |
| $x = “false”; |
string |
FALSE |
FALSE |
TRUE |
TRUE |
这个乱码问题已经烦了一两天了,搞的我烦躁异常,我已经都racking my brain了还是不行.......
以前一直没有定位到函数的问题。发现这个问题是在我在做一个汉化工作的时候。语音文件是用php写的数组,一般来讲这种工作很好做,只要将原始的语言文件翻译成另外一种语音的就好了,然后再注意一下文件编码之类的。可是这次不行了,估计是我局限思维了,就只想到了编码问题,太嫩了啊!
今天突然看到在模板输出了的时候通过一系列的关联然后调用了htmlentities()函数,我感觉到这里有问题。于是在调用前输出一下需要转换的字符串,哈哈,果然没错!
最新评论