background image

php 中

 

一些易混命令的区别  

主要易混命令的区别有:
char 和 varchar 的区别:
char 是定长而 varchar 是变长,char 的主要特点是存储方式预分配,varchar 当它的数据长度发生变
化时会影响其存储的页分配。
char 与 varchar2 是一对矛盾的统一体,两者是互补的关系.
varchar2 比 char

 

节省空间,在效率上比 char 会稍微差一些,即要想获得效率,就必须牺牲一定的

空间,这也就是我们在数据库设计上常说的 以空间换效率'。
varchar2 

 

虽然比 char 节省空间,但是如果一个 varchar2 列经常被修改,而且每次被修改的数据的

长度不同,这会引起 行迁移'(Row Migration)现象,而这造成多余的 I/O,是数据库设计和调整中

 

要尽力避免的,在这种情况下用 char 代替 varchar2 会更好一些。

mysql_connect 和 mysql_pconnect 的区别

引用 exceed php club 论坛上的朋友原话:
php 中 mysql_pconnect()的实现方式:

其实 mysql_pconnect()本身并没有做太多的处理, 它唯一做的只是在 php 运行结束后不主动 close 掉
mysql 的连接.
mysql_pconnect()与此同时 mysql_connect()的区别:
cgi 方式下:

在 php 经 cgi 方式运行时 pconnect 和 connect 是基本没有区别的, 因为 cgi 方式是每一个 php 访问起
一个进程, 访问结束后进程也就结束了, 资源也全释放了.
apache 模块方式下:
区别在于当 php 以 apache 模块方式运行时, 由于 apache 有使用进程池, 一个 httpd 进程结束后会被

放回进程池, 这也就使得用 pconnect 打开的的那个 mysql 连接资源不被释放, 于是有下一个连接请
求时就可以被复用.

这就使得在 apache 并发访问量不大的时候, 由于使用了 pconnect, php 节省了反复连接 db 的时间, 使
得访问速度加快. 这应该是比较好理解的.

但是在 apache 并发访问量大的时候, 如果使用 pconnect, 会由于之前的一些 httpd 进程占用的 mysql
连接没有 close, 则可能会因为 mysql 已经达到最大连接着, 使得之后的一些请求永远得不到满足.

例如:
若 mysql 最大连接数设为 500, 而 apache 的最大同时访问数设为 2000

假设所有访问都会要求访问 db, 而且操作时间会比较长
当前 500 个请求的 httpd 都没有结束的时候...之后的 httd 进程都是无法连接到 mysql 的(因已经达到
mysql 最大连接数). 只有当前 500 个 httpd 进程结束或被复用才可以连接得到了 mysql.
其实这个也很好解释了 xgy_p 的测试中若操作比较简单, pconnect 比 connect 效率高很多, 而且跟使

用 jsp 的连接池的速度比较接近. 因为这个时候 httpd 进程可以不断的给复用.

 

而 当 DB 操作复杂, 耗时较长时, 因 httpd 会 fork 很多并发进程处理, 而先产生的 httpd 进程不释放
db 连接, 使得后产生的 httpd 进程无法连上 db. 因为这样没有复用其它 httpd 进程的 mysql 连接. 于
是会就产生很多连接超时, 像一开始的 1000 个并发连接测试说几乎都是连接超时就是这个原因.
---
(反进来看 jsp 用的如果是纯粹的 db 连接池, 则不会有因为达到 mysql 连接上限而连不上的问题, 因

为 jsp 的连接池会使得可以等待其它连接使用完毕并复用. )
因此在并发访问量不高时,使用 pconnect 可以简单提高访问速度, 但在并发量增大后, 是否再使用
pconnect 就要看程序员的选择了..
就我个人认为, php 现在对 mysql 的连接并没有真正用到连接池, pconnect 也只是相当于借了 apache

的进程池来用, 所以在并发访问量大的时候 pconnect 并不能很好的提高访问 DB 效率. 在这一点上. 
php 的确比不上 jsp.

就目前的这种情况, 如果并发量大的话, 我个人建议最好还用 mysql_connect.

单引号'和双引号"的区别:
首先是单引号要比双引号执行效率要高,因为双引号会对内容进行预处理。
例如:'$value' 

 

输出字符 $value ; "$value"输出变量$value 的值。

include 和 require 的区别